第一部分 基本概念
首先不管是大端法还是小端法存储,计算机在内存中存放数据的顺序都是从低地址到高地址,所不同的是首先取低字节的数据存放在低地址还是取高字节数据存放在低地址。
若首先取高字节的数据存放在低地址,则是大端法;
若首先取低字节的数据存放在低地址,则是小端法;
例如有数据0x01234567 (注意:左边是高字节,右边是低字节)
大端法存放:
存放的地址依次为:0x0001 0x0002 0x0003 0x0004
对应的数据依次为:0x01 0x23 0x45 0x67
小端法存放:
存放的地址依次为:0x0001 0x0002 0x0003 0x0004
对应的数据依次为:0x67 0x45 0x23 0x01
第二部分 判断一个机器是大端存放还是小端法存放
知道了大端和小端的定义,我们很容易写代码判断一个机器是大端还是小端:
int main(int argc, char* argv[])
{
union w
{
int a;
char b;
}c;
c.a = 0x0001;
if(c.b==1)
printf("small endian\n");
else if(c.b==0)
printf("big endian\n");
else
printf("error\n");
return 0;
}
注意:之所以可以这样写来判断是因为共用体中所有成员的存放顺序是从低地址开始的
用这个程序可以判断intel PC机用的是小端法。
第三部分 总结
因为我们的思维习惯是从左到右的顺序,所以大端法的存储方式符号我们思维习惯,这因为这个原因,大端法也称为网络编码。IBM的370主机,多数基于RISC计算机,和Motorola的微处理器使用big endian方法。TCP/IP也使用big endian方法(big endian方法也叫做网络编码)。因为我们的语言都是从左到右的习惯方式,所以我们希望存储字符和数字也以同样的方式出现。因此,我们许多人会想当然的认为big endian是流行的存储方式,正如我们平时所读到的,包括我自己在内,呵呵。但是正如上面测试的那样,Intel处理器(CPUs)至少一些在他们的平台的其他程序都是little-endian的,所以实践是检验真理的唯一标准,O(∩_∩)O~
转自:http://blog.sina.com.cn/s/blog_70dd16910100q867.html