【问题标题】:C++ memory endiannes under question for meC++ 内存字节序对我来说是个问题
【发布时间】:2022-01-05 16:02:23
【问题描述】:

例如,我有一个名为 blocks_data 的 512 字节数组,我创建了一个 unsigned long long指针,指向数组中的 512 - 8 = 508 字节。我取消引用指针并分配一个值,让它成为3。据我所知,英特尔 x86_64 使用 little-endian 字节顺序。但是当我打印数组中的每个字节时,我会看到:

0 ...(54 zero bytes between)... 0 3 0 0 0 0 0 0 0
                                  _ _ _ _ _ _ _ _
                                  ulonglong in mem

而不是预期:

0 ...(54 zero bytes between)... 0 0 0 0 0 0 0 0 3

因为 little-endian 字节顺序必须意味着最低有效字节位于末尾。我做错了什么,可能不知道?

【问题讨论】:

  • en.wikipedia.org/wiki/Endianness 非常清楚地回答了您的问题。
  • Littleendian 意味着你从小端(鸡蛋)开始。术语来源于格列佛的书,好记。

标签: c++ memory endianness


【解决方案1】:

Endiannes 维基百科上的文章向我解释了一切。谢谢@Sam Varshavchik,我只是不专心

大端系统将字的最高有效字节存储在最小的内存地址,而最低有效字节存储在最大的内存地址。相比之下,little-endian 系统将最低有效字节存储在最小地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2010-12-19
    • 2012-01-30
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多