大小端模式

大小端模式:
  1. 大端模式(big endian)和小端模式(little endian)。
  2. 串口通信时,一次只能发送一个字节,这时候就有一个问题,是从0-1还是从1-0.规则就是发送方和接受方必须按照相同的顺序来通信,否则就会出现错误。这就是通信当中的大小端模式。
  3. 我们讲的实质计算机存储系统中的大小端。在计算机内存/硬盘/iNand中,因为存储系统是32位的,但数据仍然是按照字节为单位的。于是一个32位的二进制在内存中存储是由2种分布方式:高字节对应高地址(大端模式)、高字节对用低地址(小端模式)。
  4. 大小端模式本身没有好坏,理论上都可以。但存储时必须按照同样的模式来进行存储,否则会出错。(大部分是小端)
  5. 我们写代码不知道当前模式时,就需要用代码检测当前环境时大端模式还是小端模式。
    1. 利用union测试
    2. 利用指针来测试
看似可行其实不行的测试大小端方式:位与、移位、强制类型转化
  1. 位与运算无法测试大小端模式。(大端机器和小端机器的&运算后的值是相同的)

    • 位与运算时编译器提供的运算,这个运算是高于内存层次的(或者说&运算在二进制层次具有可移植性,也就是&的时候时候一定是高字节&高字节,低字节&低字节)
  2. 移位也不能测试机器大小端

    • 原因和&运算符不能测试一样,C语言对运算符的级别是高于二进制层次的。右移运算永远四讲低字节移除,而和二进制存储时这个低字节的高位还是低位无关。
  3. 强制类型转化

    • 理由同上
  • 在通信协议中,大小端是非常重要的,使用别人定义的通信协议或自己定义协议,一定要注明大小端
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值