主机字节序的大端和小端

1.定义:
    大端模式(Big Endian):数据的高字节,保存在内存的低地址中;数据的低字节,保存在内存的高地址中。
    小端模式(Little Endian):数据的高字节,保存在内存的高地址中;数据的低字节,保存在内存的低地址中。
 
2. 判断操作系统是大端还是小端:
bool IsBigEndian()
{
    union NUM
    {
        int a;
        char b;
    }num;
    num.a = 0x1234;
    if(num.b == 0x12)     //低位地址存高位数值,说明是大端
        return true;
    else
        return false;
}
3. 大端和小端的转换函数:
(1)32位系统下:
uint32_t reversebytes_32(uint32_t value)
{
    return (value&0x000000FF)<<24 | (value&0x0000FF00)<<8 | (value&0x00FF0000)>>8 | (value&0xFF000000)>>24;
}
(2)64位系统下:
uint64_t reversebytes_64(uint64_t value)
{
    uint32_t low_uint64 = uint64_t(reversebytes_32(uint32_t(value)));  //低32位转换
    uint64_t high_uint64 = (uint64_t)reversebytes_32(uint32_t(value>>32)); //高32位转换
    return (low_uint64<<32) + high_uint64;
}

 

posted @ 2018-03-17 17:20  IvanB.G.Liu  阅读(221)  评论(0编辑  收藏  举报