谈到字节序的问题,必然牵涉到两大CPU派系。
那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。
PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。
那么究竟什么是big endian,什么又是little endian呢?
其实big endian是指低地址存放最高有效字节(MSB),
而little endian则是低地址存放最低有效字节(LSB)。
下面以数字0x12345678在两种不同字节序CPU中的存储顺序如下所示:
Big Endian
低地址 高地址
----------------------------------------->
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 12 | 34 | 56 | 78 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Little Endian
低地址 高地址
----------------------------------------->
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 78 | 56 | 34 | 12 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
采用big endian方式存储数据是符合我们人类的思维习惯的
C++语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的.
JAVA编写的程序则唯一采用big endian方式来存储数据.
所有网络协议也都是采用big endian的方式来传输数据的。
所以有时我们也会把big endian方式称之为网络字节序。
int checkCPU()//若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
{
union w
{
int a;
char b;
}c;
c.a=1;
return(c.b==1);
}