计算机存储数据的大小端字节序

计算机硬件的两种存储数据的方式

  1. 大端字节序 little endian
  2. 小端字节序 big endian

举例来说数值0x1234使用两个字节存储,数值高位字节是0x12,数值低位字节是0x34

  1. 大端字节序:高位字节在前,低位字节在后,这是人类读取数值的方式
  2. 小端字节序:低位字节在前,高位字节在后,即以0x3412的形式存储

同理数值0x12345678的存储方式如下表所示

存储方式 address:0x1000 0x1001 0x1002 0x1003 0x1004 0x1005
大端存储 big endian 12 34 56 78
小端存储 little endian 78 56 34 12
  • 大端字节序先读到数值高位字节,小端字节序先读到数值低位字节序
  • 只有读取的时候才区分字节序,其他情况不用考虑

转换公式如下

//处理器读入16位整数(大端字节序),占两个字节
x = buffer[offset] * 256 + buf[offset+1];
x = buffer[offset] << 8 | buffer[offset+1];

//处理器读入16位整数(小端字节序),占两个字节
x = buffer[offset] + buffer[offset+1]*256;
x = buffer[offset] | (buffer[offset+1] << 8);

//同理32位整数(大端字节序)
i = (data[3] << 0) | (data[2] << 8) | (data[1] << 16) | (data[0] << 24);

//32位整数(小端字节序)
i = (data[0] << 0) | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
坚持原创技术分享,您的支持将鼓励我继续创作!