理解字节序 高/低位字节 大端字节序、小端字节序

宁采陈 2019-05-09 PM 2043℃ 0条

最近在接触物联网这方面技术,有点懵逼。很多知识面不够。首先接触的是通信协议的约定,其中涉及到字节、字节序方面的知识,经过百度一番后,把我理解的记录下来,备忘

字节与bit

数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。

  • 1字节 = 8个二进制位
  • 1字节 = 2位十六进制
  • 1个十六进制 = 4个二进制位

字节序是什么?

字节序,简单来说,就是字节的顺序,指的超过一个字节的数据类型在内存中存储的顺序(一个字节显然不需要顺序)。

比如A和B分别对应的二进制表示为0100 0001、0100 0010。对于储存字符串AB,我们可以0100 0001 0100 0010也可以0100 0010 0100 0001,这个顺序就是所谓的字节序。

高/低位字节

一个十进制整数,123456,很明显左边的是高位,右边的是低位。计算机也是这样认为的。
举例来说,一个十六进制数值0x2211使用两个字节储存:高位字节是0x22,低位字节是0x11。

高/低地址

假设0x123456是按从高位到底位的顺序储存,内存中是这样存放的:

高地址 -> 低地址
12 -> 34 -> 56

大端字节序(网络字节序)

大端就是将高位字节放到内存的低地址端,低位字节放到高地址端。网络传输中(比如TCP/IP)低地址端(高位字节)放在流的开始,对于2个字节的字符串(AB),传输顺序为:A(0-7bit)、B(8-15bit)。

小端字节序

高位字节数据存放在高地址处,低位数据存放在低地址处。
刚好和大端字节序相反。

主机字节序

表示当年机器的字节序(也就是网络字节序是确定的,而主机字节序是依机器确定的),一般为小端字节序。

为什么会有小端字节序?

因为计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。所以,计算机的内部处理都是小端字节序。
但是,人类还是习惯读写大端字节序。所以,除了计算机的内部处理,其他的场合几乎都是大端字节序,比如网络传输和文件储存。

计算机处理字节序的时候,不知道什么是高位字节,什么是低位字节。它只知道按顺序读取字节,先读第一个字节,再读第二个字节。

如果是大端字节序,先读到的就是高位字节,后读到的就是低位字节。小端字节序正好相反。
理解这一点,才能理解计算机如何处理字节序。

非特殊说明,本博所有文章均为博主原创。

评论啦~