多说无益,绕的人头晕,看个地址就明白了:
大字节序:把高有效位放在低地址段,例如在按字节寻址的存储器中往地址 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还没找到,写个函数如下判断:
bool IsLittleEndian()
{
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!";
}
}
{
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!";
}
}
再上一个大小字节序转换函数:
void EndianConvert(unsigned int* value)
{
*value = *value<<24 | ((*value&0xFF00)<<8) | ((*value&0xFF0000)>>8) | ((*value&0xFF000000)>>24);
}
{
*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