我注意到cout << hex
给了我奇怪的结果,我无法找到解决原因的地方。我正在做的只是为uint8_t
和uint16_t
分配一些值,然后尝试将它们写入stdout。当我运行时:
uint8_t a = 0xab;
uint16_t b = 0x24de;
cout << hex << a << endl;
cout << hex << b << endl;
我得到了结果:
$./a.out
24de
$
没有显示uint8_t的值。可能是什么导致了这个?我并不认为一种类型的cout实现不是另一种类型。
答案 0 :(得分:14)
std::uint8_t
是unsigned char
的别名:
typedef unsigned char uint8_t;
因此,选择了char&
的插入器的重载,并编写了0xab
的ASCII表示,这在技术上会因操作系统而异,因为0xab
在扩展ASCII的范围。
你必须把它强制转换为整数:
std::cout << std::hex << static_cast<int>(a) << std::endl;
答案 1 :(得分:9)
答案 2 :(得分:6)
uint8_t
是unsigned char
的别名。您实际上是在打印一个值为0xab
的字符,根据您的编码,该字符可能是无效字符。
这可以通过将其转换为另一个整数类型,将其值转换为字符串或编写某种实现std::ostream& operator<<(std::ostream&, const ClassName&)
的包装类来解决。