小端模式的英文是Little-Endian,大端模式的英文是Big-Endian。
这两个古怪的名称来自英国作家斯威夫特的《格列佛游记》。在该书中,小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。
在计算机世界中借用这个词自然不是描述鸡蛋的大小头,而是指多字节数据类型中的字节顺序。
小端模式(Little-Endian)
数据类型中的高位数据存放于高地址部分,底位数据存放于底地址部分。简而言之:高位在后,低位在前。
大端模式(Big-Endian)
数据类型中的高位数据存放于底地址部分,底位数据存放于高地址部分。简而言之:高位在前,低位在后。
感性理解一下
定义4字节宽度的变量:
U32 g_data = 0x12345678;
g_data这个数据,在不同系统中存储的字节顺序是不同的,列表如小:
小端模式(Little-Endian) 大端模式(Big-Endian)
第0字节 78h 12h
第1字节 45h 34h
第2字节 34h 56h
第3字节 12h 78h
用代码进行检测
BOOL IsLittleEndian( void )
{
U16 i = 0x1234;
U8* p = (U8*)&i;
if( p[0] == 0x34 && p[1] == 0x12 )return 1;//系统是Little-Endian
//if( p[0] == 0x12 && p[1] == 0x34 )return 0;//系统是Big-Endian
return 0;
}
小端模式和大端模式的优缺点
不同的CPU选择了不同的模式,比如X86使用小端模式而PowerPC使用大端模式。
具体应用
|