1. 基础
在解释Endianess前,需要先明白几个基础定义
1) 数据的高位与低位是什么
以1001001为例,则从左边算起是 高位 -> 低位, 简而言之就是左边是高位,右边是低位
而内存中一般来说是以字节为单位来表示数据,所以对于数字 int 型 0x12345678 来说如下
2) 多字节数据在内存中的存储地址表示
一般来说我们表示某个数据的内存地址都是取它的内存地最低位置地址表示,例如a = 0x1234567占据了内存的地址0x100,0x101,0x102,0x103四个字节,则a的内存地址为0x100
2. Endianess的定义
Endianess指的是字节在在内存中的存储次序,一般可分为
- Big Endian: 高位优先(大端)存储, 内存的最低位地址存储数据的最高位数据
- Little Endian: 低位优先(小端)存储, 内存的最低位地址存储数据的最低位数据
举例如下,还是以0x123456为例
可见实际上大端存储更符合正常人的阅读顺序
3. 现实中对Endianess的使用
以下内容摘自网上
4. 为什么要注意字节序的问题
以下内容摘自网上