大端模式和小端模式的判断及其互相转化

一.定义

大端模式(Big Endian):数据的高字节,保存在内存的低地址中;数据的低字节,保存在内存的高地址中。

小端模式(Little Endian):数据的高字节,保存在内存的高地址中;数据的低字节,保存在内存的低地址中。

二.大小端模式的判断

使用联合,通过判断首个成员的值,确定是大端还是小端模式:

bool IsBigEndian(){    
    union NUM{  
        int a;    
        char b;    
    }num;    
    num.a = 0x1234; //低位->高位:大端:12,34;小端:34,12
    if( num.b == 0x12 )//num.b取低8位
        return true;       
    return false;    
}  

三、大端模式和小端模式转换

使用移位运算:而且该方法亦可用于小端模式转成大端模式。

//32bit
/*将低8位(0~8位)左移24位,变成了高8位(24~32位);8~16位左移8位变成了(16~24位);
将原高8位和高16位右移,变成了新的低8位和低16位。*/
uint32_t reversebytes_uint32t(uint32_t value){  
    return (value & 0x000000FF) << 24 | (value & 0x0000FF00) << 8 |   
        (value & 0x00FF0000) >> 8 | (value & 0xFF000000) >> 24;   
}  
//64bit
// 先将64位的低32位转成小端模式,再将64位的高32位转成小端模式  
// 在将原来的低32位放置到高32位,原来的高32位放置到低32位  
uint64_t reversebytes_uint64t(uint64_t value){  
    uint32_t high_uint64 =
        (uint64_t)reversebytes_uint32t(uint32_t(value));// 低32位转成小端  
    uint64_t low_uint64 = 
        (uint64_t)reversebytes_uint32t(uint32_t(value >> 32));// 高32位转成小端  
    return (high_uint64 << 32) + low_uint64;  
}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值