little endian和big endian是表示计算机字节顺序的两种格式,所谓的字节顺序指的是长度跨越多个字节的数据的存放形式.
假设从地址0x00000000开始的一个字中保存有数据0x1234abcd,那么在两种不同的内存顺序的机器上从字节的角度去看的话分别表示为:
1)little endian:在内存中的存放顺序是0x00000000-0xcd,0x00000001-0xab,0x00000002-0x34,0x00000003-0x12
2)big endian:在内存中的存放顺序是0x00000000-0x12,0x00000001-0x34,0x00000002-0xab,0x00000003-0xcd
需要特别说明的是,以上假设机器是每个内存单元以8位即一个字节为单位的.
简单的说,ittle endian把低字节存放在内存的低位;而big endian将低字节存放在内存的高位.
现在主流的CPU,intel系列的是采用的little endian的格式存放数据,而motorola系列的CPU采用的是big endian.
首先,明确几个概念
1、字节:固定为8位二进制
2、字长:字为计算机一次能处理的数据长度
8位机中为8位二进制 即1个字节
16位机中为16位二进制 即2个字节
32位机中为32位二进制 即4个字节
3、char类型长度:固定为一个字节,即8位二进制
4、int类型长度:固定为一个字长
实例如下:环境为32位机
int i=1;
Big-endian方式下: 0x00 0x00 0x00 0x01
Little-endian方式下:0x01 0x00 0x00 0x00
地址: 1000 1001 1002 1003
获取i的地址,为1000处 &i
强制转换指针类型为char * ,即从地址起点截断1个字节 (char*)&i
此时
Big-endian方式下为:0x00
Little-endian方式下为:0x01
得出如下结论
int i=1;
若*(char*)&i等于1 则为Little-endian方式,否则为Big-endian方式
采用Little-Endian的
操作系统 FreeBSD,Linux,Windows
x86的机器
采Big-Endian的
操作系统 MAC OS
ARM, Alpha,摩托罗拉的PowerPC
Network中的变量
Java语言.
bool IsBig_Endian()
//如果字节序为big-endian,返回true;
//反之为 little-endian,返回false
{
unsigned short test = 0x1122;
if(*( (unsigned char*) &test ) == 0x11)
return TRUE;
else
return FALSE;
}//IsBig_Endian()