【问题标题】: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

    这不会受到字节序的影响。

    【讨论】:

    • 我想我把 LSB 和我表中的列顺序弄乱了。
    【解决方案2】:

    十六进制的61183EEFF

    字节序与一些数值如何存储在内存中有关,而不是如何定义从一个基数到另一个基数的转换。因此std::hex 的输出不取决于字节顺序,尽管它可能是内部计算中的一个因素。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 2014-03-07
      • 1970-01-01
      • 2014-09-18
      • 2013-09-12
      相关资源
      最近更新 更多