如果将一个32位的整数0x12345678存放到一个整型变量(int)中,这个整型变量采用大端或者小端模式在内存中的存储由下表所示。为简单起见,本文使用OP0表示一个32位数据的最高字节MSB(Most Significant Byte),使用OP3表示一个32位数据最低字节LSB(Least Significant Byte)。
地址偏移 |
大端模式 |
小端模式 |
0x00 |
12(OP0) |
78(OP3) |
0x01 |
34(OP1) |
56(OP2) |
0x02 |
56(OP2) |
34(OP1) |
0x03 |
78(OP3) |
12(OP0) |
小端:较高的有效字节存放在较高的的存储器地址,较低的有效字节存放在较低的存储器地址。
大端:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址。
【用函数判断系统是Big Endian还是Little Endian】
//如果字节序为big-endian,返回true;
//反之为 little-endian,返回false
bool IsBig_Endian()
{
unsigned short big_endian = 0x1234;
if(*( (unsigned char*) &big_endian) == 0x12)
return true;
else
return false;
}//IsBig_Endian()