大端小端

来源:互联网 发布:帝国cms tags调用 编辑:程序博客网 时间:2024/05/17 03:07

我们在调试代码的时候经常会遇到大小端的情况,在x86体系下是使用的小端存储,在ARM体系下默认是小端,但是可以设置为大端模式,下面来介绍下大小端的区别

1. 误区


一个二进制数据0b 1000,0100,0001,1000(0x8418),数据高位:0x84,低位:0x18

经常有人以为数据在大小端模式下存储情况为:

地址 大端 小端 0x20 0x84(1000,0100) 0x18(0001,1000) 0x21 0x18(0001,1000) 0x21(0010,0001)

到小端模式变为:0b 0001,1000,0010,0001

其中的误区是把大小端内存存储的最小单位设为了一个bit,但是正确的设置是一个byte(8bit),所以正确的内存存储为:

地址 大端 小端 0x20 0x84 0x18 0x21 0x18 0x84

2. 大端小端下内存的存储


大小端存储区别

大端模式:高位数据存在低地址,低位数据存在高地址
小端模式:高位数据存在高地址,低位数据存在低地址

int类型(假如32bit)下的存储情况

举例,一个int型数据0x12345678在不同模式下的存储情况:
数据位从高到低:0x12->0x34->0x56->0x78

地址 大端 小端 0x20 0x12 0x78 0x21 0x34 0x56 0x22 0x56 0x34 0x23 0x78 0x12

数组下的存储情况

拿一个union来举例最合适不过,假设一个联合体:

union {    int a;    chat b[4];} u;

现在a = 0x12345678,那么数组b中的存储情况如下表:

b 地址 大端 小端 b[0] 0x20 0x12 0x78 b[1] 0x21 0x34 0x56 b[2] 0x22 0x56 0x34 b[3] 0x23 0x78 0x12
0 0
原创粉丝点击