首页 > 试题广场 >

在网络字节序中,所谓”小端”(little endian)说

[单选题]
在网络字节序中,所谓”小端”(little endian)说法正确的是
  • 高字节数据存放在低地址处,低字节数据存放在高地址处
  • 低字节位数据存放在内存低地址处, 高字节位数据存放在内存高地址处
  • 和编译器相关
  • 上述答案都不正确

对于整型、长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节);而 Little endian 则相反,它认为第一个字节是最低位字节(按照从低地址到高地址的顺序存放据的低位字节到高位字节)

例如,假设从内存地址 0x0000 开始有以下数据:  
0x0000         0x0001       0x0002       0x0003  
0x12            0x34           0xab           0xcd 
如果我们去读取一个地址为 0x0000 的四个字节变量,若字节序为big-endian,则读出结果为0x1234abcd;若字节序为little-endian,则读出结果为0xcdab3412。

如果我们将0x1234abcd 写入到以 0x0000 开始的内存中,则Little endian 和 Big endian 模式的存放结果如下:  
地址           0x0000         0x0001        0x0002          0x0003 
big-endian   0x12           0x34            0xab            0xcd  
little-endian  0xcd           0xab            0x34            0x12

一般来说,x86 系列 CPU 都是 little-endian 的字节序,PowerPC 通常是 big-endian,网络字节顺序也是 big-endian还有的CPU 能通过跳线来设置 CPU 工作于 Little endian 还是 Big endian 模式。

对于0x12345678的存储:

小端模式:(从低字节到高字节)
地位地址 0x78 0x56 0x34 0x12 高位地址

大端模式:(从高字节到低字节)
地位地址 0x12 0x34 0x56 0x78 高位地址

发表于 2019-08-05 14:42:29 回复(0)