【问题标题】:Does C++ std::hex reverse bytes order? (printing decimal as hexadecimal)C++ std::hex 是否反转字节顺序? (将十进制打印为十六进制)
【发布时间】:2020-11-25 15:41:36
【问题描述】:
我在理解以下 C++ 代码时遇到了一些问题:
std::cout << std::hex << 61183 << std::endl; // prints eeff
我正在使用 little-endian 机器(Intel x86-64),我想在位和字节级别了解该结果是如何产生的,因此我为最低有效位架构编写了下表.
如您所见,我预计代码行的输出是FFEE,而不是EEFF。所以我在制作那张桌子时一定错过了一些东西,但我真的不明白是什么。 std::hex 是否受计算机字节序的影响?
【问题讨论】:
标签:
c++
hex
byte
endianness
【解决方案1】:
字节序是关于如何将数字存储在字节寻址的内存中。
另一方面,std::hex 生成十六进制文本。
0x1000 * 14 + 0x100 * 14 + 0x10 * 15 + 0x1 * 15 == 61183,所以61183 是十六进制的EEFF。
这不会受到字节序的影响。
【解决方案2】:
十六进制的61183 是EEFF。
字节序与一些数值如何存储在内存中有关,而不是如何定义从一个基数到另一个基数的转换。因此std::hex 的输出不取决于字节顺序,尽管它可能是内部计算中的一个因素。