什么是字节序?
字节序,顾名思义,就是字节组织的顺序。我们可以将其根据其存储时从低位开始还是从高位开始分为两种,具体如下:
类型 | 简写 | 本质 |
大端 | BE(big endian) | 将高序字节存储在起始地址 |
小端 | LE(little endian) | 将低序字节存储在起始地址 |
这就是大小端序的含义,两者除了顺序上没有其他的区别,在性能上、功能上都是一样的。
举个例子,0x1234567,这个是一个十六进制的整数,储存它需要至少四个字节。
如果从0x100开始储存0x1234567这个数,存储结构如下图:
地址 | 0x100 | 0x101 | 0x102 | 0x103 |
大端 | 01 | 23 | 45 | 67 |
小端 | 67 | 45 | 23 | 01 |
为什么要有大端字节序和小端字节序?
计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的,所以计算机的内部处理大都是小端字节序。
但是,人类还是习惯大端字节序。所以,除了计算机的内部处理,其他场合几乎都是大端字节序,比如网络传输和文件储存等。
主机字节序和网络字节序
前面说的字节序其实是指主机字节序,即主机字节序既包括小端字节序,又包括大端字节序。它与具体的CPU类型、操作系统类型等有关,就像前面的表格列出的。
网络字节序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而保证数据在不同主机之间传输时能够被正确解释。
网络字节序采用大端字节序。