我正在尝试将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。我该如何解决这个问题?
答案 0 :(得分:37)
setw
将设置整个格式化输出的宽度,包括显示的基数,这就是您没有看到前导0
的原因。此外,如果您使用std::showbase
和std::uppercase
,则无法以小写形式显示基数。解决方案是手动插入底座,然后应用其余的操纵器。
ss << "0x" << std::uppercase << std::setfill('0') << std::setw(4) << std::hex << id;
这会输出0x0467