c++ - cout << hex 与 uint8 和 uint16 的行为

标签 c++ hex stdout

我注意到 cout << hex给我奇怪的结果,我找不到任何地方可以回答为什么。我所做的只是为 uint8_t 分配一些值和 uint16_t然后尝试将它们写入标准输出。当我运行这个时:

uint8_t a = 0xab;
uint16_t b = 0x24de;
cout << hex << a << endl;
cout << hex << b << endl;

我得到的结果:

$./a.out

24de
$

没有显示 uint8_t 的值。是什么原因造成的?我不认为对于一种类型没有针对另一种类型的 cout 实现。

最佳答案

std::uint8_tunsigned char 的别名:

typedef unsigned char uint8_t;

因此选择了采用 char& 的插入器重载,并编写了 0xab 的 ASCII 表示,这在技术上可能因操作系统而异,因为 0xab在Extended ASCII范围内。

你必须把它转换成一个整数:

std::cout << std::hex << static_cast<int>(a) << std::endl;

关于c++ - cout << hex 与 uint8 和 uint16 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23575381/

相关文章:

c++ - 在数据包负载中发送公钥

linux - 将 stderr 和 stdout 重定向到 Bash 中的文件的不同方法?

Java - System.setOut 不保存异常消息

c++ - Windows 函数 "NetUserChangePassword"不再在 Windows 10 下工作(在 Windows 7 下工作)

c# - 封装不是很可笑吗?

c# - 替换文件中的字节

c++ - 十六进制编辑器如何如此快速地显示数据?

command-line - Adobe AIR 应用程序能否通过命令行输出到控制台运行?

c++ - 多重继承会调用哪个实例?

javascript - 如何正确处理 JavaScript 中的字节读取?如何正确选择岗位