为什么 std::hex 没有特别用字符打印为十六进制?



实际上在Visual 2013下编译C++,std::hex(粘性运算符)的行为不是我所期望的:

我正在尝试打印一个字符作为其十六进制值,但我被迫掩盖或投射我的值以获得想要的行为。

所以我的问题不是怎么做,而是为什么。

char valueInChar = 0xc8; //decimal 200
std::cout << std::hex << valueInChar; //prints out ╚
std::cout << std::hex << (valueInChar & 0xFF); //prints out c8
std::cout << std::hex << int(valueInChar); //also prints out c8

这是 std 可视化实现中的错误吗?我和std::ios::hex混淆了吗?

charoperator<<重载按原样打印字符值,因此它们不会格式化为整数(这会受到格式标志的影响),而是格式化为字符。

带有掩码的行碰巧有效,因为几乎所有算术和按位运算符都将小整数(signed/unsignedcharshort)提升为"常规大小"的整数(根据某些规则intunsigned int),因此您实际上是在调用operator<<以进行int

要使其在不遮罩的情况下工作,只需将强制转换添加到int.

std::cout << std::hex << int(valueInChar);

相关内容

  • 没有找到相关文章

最新更新