[CS] 字节序

1. 什么是字节序(Byte Order)

计算机读取数据时,对字节的排序方式。分为两种(以A=0x1122为例):

  1. 大端(Big-Endian):高位在前,低位在后,则A的读取方式是11 22,与人类的认知方式一致;
  2. 小端(Little-Endian):低位在后,高位在前,则A的读取方式是22 11,与人类的认知方式相反。

计算机的数据传输单位是字节(byte),因此计算机在读取大于1byte的数据时,要根据字节间的先后条件获得正确的数字,如0x11FF,如果按Big-Endian来读取,则是11, FF,即0001 0001, 1111 1111;如果按Little-Endian来读取,则为1111 1111, 0001 0001

(注意在高位补零)

2. 大小端的转化

具体步骤:

  1. 移位(左移)
  2. 与运算

2.1 大端转小端

设大端数字A=1122(以大端格式显示),由于计算机读取都是从低位开始,因此第一个byte为[22],此时为了转成小端表示,应该要将[22]左移到[11]之前,因此是x = buf[x] << 8 | buf[x+1]

2.2 小端转大端

设小端数字A=AABB,从低位读取,第一个byte为[AA],要将[BB]左移到[AA]之前,因此x = buf[x+1] << 8 | buf[x]

3. 参考资料

  1. 阮一峰的博客

你可能感兴趣的:([CS] 字节序)