【问题标题】:how to format hex numbers using stringstream如何使用字符串流格式化十六进制数字
【发布时间】:2014-09-28 08:54:12
【问题描述】:

我正在尝试使用 stringstream 将 unsigned short 转换为其十六进制表示形式,并以 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 基数(当前为 0X)之后的十六进制值没有前缀 0。例如,这将输出 0X467 而不是预期的 0x0467。我该如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

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

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

    这会输出0x0467

    【讨论】:

    • 顺便提一下std::internal 可用于获取基数和数字之间的填充字符(但如果您想要不同大小写的基数和数字,则无济于事)。
    猜你喜欢
    • 1970-01-01
    • 2011-08-05
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 2023-01-18
    • 2012-08-15
    相关资源
    最近更新 更多