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

时间:2014-08-05 15:51:36

标签: c++ c++11 hex string-formatting stringstream

我正在尝试将unsigned short转换为大写的十六进制表示,并使用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。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:37)

setw将设置整个格式化输出的宽度,包括显示的基数,这就是您没有看到前导0的原因。此外,如果您使用std::showbasestd::uppercase,则无法以小写形式显示基数。解决方案是手动插入底座,然后应用其余的操纵器。

ss << "0x" << std::uppercase << std::setfill('0') << std::setw(4) << std::hex << id;

这会输出0x0467

相关问题