Little-endian和Big-endian

时间:2014-10-05 15:50:43

标签: c

我必须编写一个例程来进行2个表示之间的转换。 但我有点困惑。 如果我的架构具有32位字的存储器 我必须存储单词0xA15D23B1 与Big-endian一样,在23之后的5D和最后的B1之后,记忆变为A1 与Little-endian相比,在5D之后和之后的A1之后,记忆是B1 这样对吗?

如果我能解决机器上的各个字节,那么我的单词地址为零 谁是字节1? 在Big-endian是5D?在小端也是5D?

感谢所有愿意回答我的人

4 个答案:

答案 0 :(得分:5)

Big-endian内存布局首先是最重要的字节,而little-endian布局首先是最不重要的字节。给定值0xA15D23B1:

Memory address    0  1  2  3
Big-endian       A1 5D 23 B1
Little-endian    B1 23 5D A1

请注意,big-endian内存布局不会因字大小而改变,但是little-endian会改变。如果考虑两个短字(16位),0xA15D和0x23B1连续存储:

Memory address    0  1  2  3
Big-endian       A1 5D 23 B1
Little-endian    5D A1 B1 23

答案 1 :(得分:0)

  • 而小端也是5D?

没有。在小端,它是23

答案 2 :(得分:0)

一种记住的好方法"哪个是":

  

Big-endian从最重要的(最重要的)结束开始;小端从小端开始。

例如,当将单词0xA15D23B1视为字节序列时,big-endian机器会从最重要的字节0xA1启动它。它将存储在最低地址(这是可能令人困惑的单词的含义" start")。

顺便说一句,如果您只想将big-endian转换为little-endian或back-back,那么您不必理解这一点:只需颠倒字节顺序!这就是为什么许多人都不愿意理解what "big-endian" or "little-endian" means - 你通常只需要了解是否要交换字节。

答案 3 :(得分:0)

处理器有多种方式实现big-endian和little-endian - 详细讨论,参考Endianness上的Wikipedia文章。

对于2字节数量,只有两个选项:

Value:           0x1234 (MSB = 0x12, LSB = 0x34)
Little-endian:   LSB then MSB    0x34  0x12  — Intel, …
Big-endian:      MSB then LSB    0x12  0x34  — SPARC, PowerPC, …

对于4字节数量,有更多选项,但仍有两个主要选项(加上历史好奇心):

Value:           0x12345678 (MSB = 0x12, NMSB = 0x34, NLSB = 0x56, LSB = 0x78)
Little-endian:   LSB, NLSB, NMSB, MSB    0x78  0x56  0x34  0x12
Big-endian:      MSB, NMSB, NLSB, LSB    0x12  0x34  0x56  0x78
PDP-11:          NMSB, MSB, NLSB, LSB    0x34  0x12  0x78  0x56

请注意,许多现代芯片组都是双端的 - 可以切换为以big-endian或little-endian模式运行:

  

某些体系结构(包括ARM版本3及更高版本,PowerPC,Alpha,SPARC V9,MIPS,PA-RISC,SuperH SH-4和IA-64)具有允许在数据段,代码段或数据段中切换字节序的设置两者。