1. 什么是字节序(Byte Order)
计算机读取数据时,对字节的排序方式。分为两种(以A=0x1122
为例):
- 大端(Big-Endian):高位在前,低位在后,则A的读取方式是
11 22
,与人类的认知方式一致; - 小端(Little-Endian):低位在后,高位在前,则A的读取方式是
22 11
,与人类的认知方式相反。
计算机的数据传输单位是字节(byte)
,因此计算机在读取大于1byte的数据时,要根据字节间的先后条件获得正确的数字,如0x11FF
,如果按Big-Endian来读取,则是11, FF
,即0001 0001, 1111 1111
;如果按Little-Endian来读取,则为1111 1111, 0001 0001
。
(注意在高位补零)
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]