C 64位值的Endian表示法

C 64位值的Endian表示法,c,32bit-64bit,endianness,C,32bit 64bit,Endianness,假设我有无符号长x=0x0123456789ABCDEF 以下哪项是正确的?(我只能验证第一个): 在32位little endian处理器上,它将在内存中显示为67 45 23 01 EF CD AB 89 在64位little endian处理器上,它将在内存中显示为EF CD AB 89 67 45 23 01 在32位big-endian处理器上,它将在内存中显示为01 23 45 67 89 AB CD EF 在64位big-endian处理器上,它将在内存中显示为01 23 45

假设我有
无符号长x=0x0123456789ABCDEF

以下哪项是正确的?(我只能验证第一个):

  • 在32位little endian处理器上,它将在内存中显示为
    67 45 23 01 EF CD AB 89
  • 在64位little endian处理器上,它将在内存中显示为
    EF CD AB 89 67 45 23 01
  • 在32位big-endian处理器上,它将在内存中显示为
    01 23 45 67 89 AB CD EF
  • 在64位big-endian处理器上,它将在内存中显示为
    01 23 45 67 89 AB CD EF

我想说,32位解决方案在很大程度上取决于编译器。它可以选择以自己喜欢的任何方式表示这种缺乏本机支持的类型,只要大小是预期的大小


我同意64位是正确的。

第一个是错误的。在ia32上,至少布局为
EF CD AB 89 67 45 23 01


其他的都是正确的。

小尾端表示最低有效位在第一个字节,大尾端表示最低有效位在最后一个字节:

0x0123456789ABCDEF大端是0x01、0x23、0x45

0x0123456789ABCDEF小端点是0xEF,0xCD,0xAB


处理器的本机字长和大小无关紧要;内存中的外观由endian决定。

您试过了吗?你用谷歌搜索过吗?“64位值的Endian表示法”会是一个更好的标题。32位系统上的寄存器是32位的。@V-X:堆栈溢出问答中没有显示它。正如我在问题中提到的:我只能验证第一个(因为我手头只有那个特定的处理器)。第二个、第三个和第四个是真的,第一个是假的。请注意,32位对64位是一个危险的问题-只有尾数重要。是的,但它只能上升到一定的大小。例如,如果你有一个大小为32字节的结构,它不会“反转所有字节”,对吗?我假设这个大小取决于处理器的寄存器大小。整数的尾数决定了该整数在内存中的字节顺序。结构没有端点。Endianness是结构中整数的一个属性,但结构本身是由编译器选择的布局,它选择的字段对齐方式。@barak manos有。序列endian 1 2 3 4 5 6 7 8和8 7 6 5 4 2 1是最常见的,但存在5 6 7 8 1 2 3 4和其他变体。为了好玩,请注意URL是一个混合的endian“…”。如果是big endian,那就是“…”谢谢;我说“我只能验证第一个”,但假设我是正确的,所以没有麻烦:)对不起。。。我的假设是“字节顺序”将应用于大小不超过N字节的变量,其中N是处理器的寄存器大小。显然这个假设是错误的。。。谢谢。请注意,这个问题的答案不是由C标准决定的。整数表示由编译器制造商决定。编译器允许(尽管非常不方便)在小端硬件上以大端方式存储整数值。