数据存储的大小端模式
前言
一个数据在内存中有两种存储方式:高地址存储高字节数据,低地址存储低字节数据;或者高地址存储低字节数据,而低地址存储高字节数据
一、什么是大/小端模式
不同字节的数据在内存中存储顺序称之为字节序。根据字节序的不同,可以将存储模式分为大端模式和小端模式,以4字节16进制数0x12345678举例说明。
高地址 低地址
大端模式 |12|34|56|78| 低字节放在低地址;高字节放在高地址
小端模式 |78|56|34|12| 低字节放在高地址;高字节放在低地址
二、代码测试
1. 利用 “截断”原理测试
例如:定义一个2字节的 short 型变量 a ,再定义一个 1字节的char 型变量 b ;当
b = a; //此时会发生“截断”
理解”截断“前首先说一下内存地址的概念,内存地址就是编号,每一个字节一个编号,a 占用两个字节,并将第一个字节的编号作为其变量地址,发生截断时,会从第一个字节编号里面取出来一个字节的数据赋值给 b。
代码如下:
int main()
{
short a = 0x1234;
char b ;
b = a;
printf("%x", b);
}
结果如下
34
--------------------------------
Process exited after 0.828 seconds with return value 2
请按任意键继续. . .
由此可得,低字节地址存储的为0x34 ,又因为0x34 为变量的低字节,所以为小端模式。
2.利用共用体
代码如下:
union point{
short i;
char arr[2];
};
int main(int argc, char *argv[])
{
union point test;
test.i = 0x1234;
printf("%x %x ", test.arr[0],test.arr[1]);
return 0;
}
运行结果:
34 12
--------------------------------
Process exited after 0.7799 seconds with return value 0
请按任意键继续. . .
由此可得 test.i 低字节地址存储的为0x34,高字节地址存储的为0x12,故为小端模式。
总结
以上,介绍了两种测试机器大小端的方式,经验证本机为小端模式。