大端模式和小端模式
这两个模式我们经常听说,平时的协议里面也经常看见这两个词语,这两个词语主要是用来说明字节的排序方式的。
大端模式
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。
小端模式
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
例程解释
下面以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用u8 buf[4]来表示value
大端模式: 低地址存放高位,如下:
---------------
buf[3] (0x78) – 低位
buf[2] (0x56)
buf[1] (0x34)
buf[0] (0x12) – 高位
---------------
小端模式: 低地址存放低位,如下:
---------------
buf[3] (0x12) – 高位
buf[2] (0x34)
buf[1] (0x56)
buf[0] (0x78) – 低位
--------------
内存中的数据的读取方法
0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000
0000440: b484 6c4e 004e ed00 0000 0000 0100 0000
在大端模式下,前32位应该这样读: e6 84 6c 4e ( 假设int占4个字节)
在小端模式下,前32位应该这样读: 4e 6c 84 e6( 假设int占4个字节)
- 大端模式记忆方法: 地址的增长顺序与值的增长顺序相反,低地址存放高位
- 小端模式记忆方法: 地址的增长顺序与值的增长顺序相同,低地址存放低位