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

mti*_*ijn 21 c++ hex stringstream string-formatting c++11

我试图将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();
Run Code Online (Sandbox Code Playgroud)

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

Pra*_*ian 42

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

ss << "0x" << std::uppercase << std::setfill('0') << std::setw(4) << std::hex << id;
Run Code Online (Sandbox Code Playgroud)

这输出 0x0467

  • 要使用std :: setfill,你需要`#include <iomanip>` (6认同)