现在的位置: 首页 > 综合 > 正文

大字节序、小字节序原理说明及各操作系统的判断方法

2012年12月12日 ⁄ 综合 ⁄ 共 995字 ⁄ 字号 评论关闭

多说无益,绕的人头晕,看个地址就明白了:

大字节序:把高有效位放在低地址段,例如在按字节寻址的存储器中往地址 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!";
    }
}

 

 再上一个大小字节序转换函数:

 

void EndianConvert(unsigned int* value)
{
    
*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

抱歉!评论已关闭.