大小端按字节读写内存

我们知道,内存中的数据分为大端模式和小端模式,有时候我们把数据写进内存,我们可能不确定它是按照大端模式还是小端模式存的,除非我们写个小代码先验证一下(这里就不介绍怎么验证了),所以读出来可能就不是我们存进去的值了。这里介绍一种读写方式,是我在写代码过程中遇到的,本来是要用我自己的策略来存取的,但是被告知有这个宏,很开心拿来用了,按照这种方式,就可以解决我们的困扰了。在这里分享给大家。本人刚入行菜鸟,如果有不足的地方,请大神们指正


大端模式写内存:

#define write_int_big_endian_4b(_buf, _i_value) \

    do{\
        ((unsigned char*)(_buf))[0] = (unsigned char)(((_i_value) >> 24) & 0xff);\
        ((unsigned char*)(_buf))[1] = (unsigned char)(((_i_value) >> 16) & 0xff);\
        ((unsigned char*)(_buf))[2] = (unsigned char)(((_i_value) >> 8) & 0xff);\
        ((unsigned char*)(_buf))[3] = (unsigned char)((_i_value) & 0xff);\

    }while(0)


大端模式读内存:

#define read_int_big_endian_4b(_buf)   ((((unsigned)(((unsigned char*)(_buf))[0])) << 24) \
                                            | (((unsigned)(((unsigned char*)(_buf))[1])) << 16) \
                                            | (((unsigned)(((unsigned char*)(_buf))[2])) << 8)  \
                                            | (((unsigned)(((unsigned char*)(_buf))[3])) << 0))


小端模式读内存:

#define read_int_little_endian_4b(_buf)((((unsigned)(((unsigned char*)(_buf))[0])) << 0)  \
                                            | (((unsigned)(((unsigned char*)(_buf))[1])) << 8)  \
                                            | (((unsigned)(((unsigned char*)(_buf))[2])) << 16) \
                                            | (((unsigned)(((unsigned char*)(_buf))[3])) << 24))



小端模式写内存:

#define write_int_little_endian_4b(_buf, _i_value) \
    do{\
        ((unsigned char*)(_buf))[0] = (unsigned char)((_i_value) & 0xff);\
        ((unsigned char*)(_buf))[1] = (unsigned char)(((_i_value) >> 8) & 0xff);\
        ((unsigned char*)(_buf))[2] = (unsigned char)(((_i_value) >> 16) & 0xff);\
        ((unsigned char*)(_buf))[3] = (unsigned char)(((_i_value) >> 24) & 0xff);\
    }while(0)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值