对于跨越多个字节的程序对象,该对象一般存储为连续的字节序列,对象的地址为所使用字节中最小的地址。某些机器选择在存储器中按照从最低有效字节到最高有效字节的顺序存储对象,这种存储方式叫做小端法(little endian),大多数intel兼容机都采用这种规则。某些机器选择在存储器中按照从最高有效字节到最低有效字节的顺序存储对象,这种存储方式叫做打端法(big endian),大多数IBM的机器都采用这种规则。
假设int变量x,它占用地址范围为0x100~0x103这4个字节,并且x=0x01234567,采用不同存储规则的存储方式如下:
大端法:
0x100 0x101 0x102 0x103
01 | 23 | 45 | 67 |
小端法:
0x100
0x101 0x102 0x103
67 | 45 | 23 | 01 |
下面的代码可判断机器采用哪种规则。
#include <stdio.h>
int main()
{
int m = 0x11;
unsigned char *p = (unsigned char *)&m;
if (p[0] == 0x11)
{
printf("little endian!\n");
}
else if(p[sizeof(int)-1] == 0x11)
{
printf("big endian\n");
}
return 0;
}
参考:
1、深入理解计算机系统