概念
所谓大端小端,指的是对于多字节的数据类型(比如,int)在内存中存放的字节顺序。
小端是指数据的低位存放在低地址的字节上,数据的高位存放在高地址的字节上。
大端是指数据的低位存放在高地址的字节上,数据的高位存放在低地址的字节上。
例如,对于一个int型的整数0x12345678(十六进制),在大端和小端模式下的存储顺序如图:
(为了书写方便,地址只写了十六进制的后四位)
可以看到在小端模式下,整数12345678的低字节数据78存放在低地址0x4000上,高字节数据12存放在高地址0x4003上。
测试
代码如下,利用共用体union来进行测试。
#include <stdio.h>
int SmallEndian()
{
union IntChar
{
int x;
char y;
}uni;
uni.x = 0x12345678;
printf("The number of low address is %x\n",uni.y);//利用共用体的性质,输出低地址位置的值,即uni.y的值
if(uni.y==0x78)
{
return 1;
}
else
return 0;
}
int main()
{
printf("For a integer :0x12345678\n");
if(SmallEndian())
{
printf("This is a Small Endian machine.\n ");
}
else
{
printf("This is not a Small Endian machine.\n");
}
}
大家就可以用这个小代码,来测试自己的机器是大端模式还是小端模式了!