多说无益,绕的人头晕,看个地址就明白了:
大字节序:把高有效位放在低地址段,例如在按字节寻址的存储器中往地址 0x0001 存放值 0x12345678,在存储器中为
地址 数值
0x0004 0x78
0x0003 0x56
0x0002 0x34
0x0001 0x12
小字节序:把低有效位放在低地址段,例如在按字节寻址的存储器中往地址 0x0001 存放值 0x12345678,在存储器中为
地址 数值
0x0004 0x12
0x0003 0x34
0x0002 0x56
0x0001 0x78
现在主流的CPU,intel系列的是采用的little endian的格式存放数据的。
判定方法:
很多语言自带函数,但Linux还没找到,写个函数如下判断:
{
union
{
long Long;
char Char[ sizeof ( long )];
} u;
u.Long = 1 ;
if (u.Char[ 0 ] == 1 )
{
return true ;
}
else if (u.Char[ sizeof ( long ) - 1 ] == 1 )
{
return false ;
}
else
{
throw " Unknown Addressing! " ;
}
}
再上一个大小字节序转换函数:
{
* value = * value << 24 | (( * value & 0xFF00 ) << 8 ) | (( * value & 0xFF0000 ) >> 8 ) | (( * value & 0xFF000000 ) >> 24 );
}
参考:
http://www.dnbcw.com/biancheng/c/esbu62056.html
http://hi.baidu.com/wbwssb/blog/item/7114224df46c6dc6d1c86ac6.html