一、什么是大小端
低位地址存储低位数据的是小端,低位地址存储高位数据的是大端
举个例子:假设我定义int num = 0x01020304;
,那么0x01
是高位数据,0x04
是低位数据,我们再假设这个数据存储在0xe1e2e3e4
这个地址中
那么如果数据是这么存的就是小端:
0xe1e2e3e4(低位地址) = 0x04
0xe1e2e3e5 = 0x03
0xe1e2e3e6 = 0x02
0xe1e2e3e7(高位地址) = 0x01
如果数据是这么存的就是大端:
0xe1e2e3e4 = 0x01
0xe1e2e3e5 = 0x02
0xe1e2e3e6 = 0x03
0xe1e2e3e7 = 0x04
注意:一般的个人计算机都是小端系统,而大型的服务器(网络设备)采用的是大端,所谓的网络字节序也是大端
二、如何程序证明
#include <stdio.h>
typedef union Test
{
int num;
char data;
}Test;
int main()
{
Test t;
t.num = 0x01020304;
if(t.data == 0x04)
printf("小端\n");
else if(t.data == 0x01)
printf("大端\n");
else
printf("Unknown\n");
return 0;
}
输出:
小端