c – 如何使用stringstream格式化十六进制数字

前端之家收集整理的这篇文章主要介绍了c – 如何使用stringstream格式化十六进制数字前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将一个无符号的短整型转换为十六进制表示形式,并使用stringstream前缀为0.我似乎无法得到大写,0是正确的.这是我现在所在:
USHORT id = 1127;
std::stringstream ss;
ss << std::showbase << std::uppercase << std::setfill('0') << std::setw(4) << std::hex << id;
std::string result = ss.str();

这导致前缀“0x”基数也是大写,但我希望它是小写的.它也导致在前缀0x base(当前为0X)之后的十六进制值中没有前缀0.例如,现在将输出0X467而不是预期的0x0467.我该如何解决

解决方法

setw将设置整个格式化输出的宽度,包括显示的基数,这就是为什么你没有看到前导0.另外,如果使用std :: showbase,没有办法使基数显示为小写以及std ::大写.解决方案是手动插入基座,然后应用剩余的操纵器.
ss << "0x" << std::uppercase << std::setfill('0') << std::setw(4) << std::hex << id;

输出0x0467

猜你在找的C&C++相关文章