首页 > 学院 > 开发设计 > 正文

大端小端

2019-11-06 09:40:09
字体:
来源:转载
供稿:网友

我们在调试代码的时候经常会遇到大小端的情况,在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

3. 优劣


关于两者的优劣,已经好多人长篇大论分析了,但是偶看了许多,感觉没区别。。。。。。,理解了其实都是一样的


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表