一、MSB和LSB

首先我们要理解什么是MSB和LSB。数据在计算机里面都是二进制存储的,二进制的最高位为MSB,最低位是LSB。

MSB:Most Significant Bit(最高有效位),也就是最高位,最左侧的bit。

LSB:Least Significant Bit(最低有效位),最低位,最右侧的bit。

二、存储空间的高地址字节和低地址字节

除了char之外,其他类型的变量空间基本上都有很多字节。int类型的变量空间为4个字节,每个字节都有字节的地址。

地址最小的为低地址字节,地址最大的为高地址字节。

三、测试电脑中大小端序

这里采用联合体进行测试:

#include <stdio.h>union un
{int a;char b;
}test;int main(void)
{test.a = 0x12345678;     //  0x12     0x34     0x56     0x78printf("%x\n", test.b);  //?00010010 00110100 01010110 01111000?if(test.b == 0x78){printf("Little-endain:LSB in low Byte\n");}else if(test.b == 0x12){printf("Big-endain:MSB in low Byte\n");}return 0;
}

根据打印的结果就可以知道计算机的大小端序。

测试的原理是:a有4个字节,b有一个字节,联合体的大小是最大成员变量a的大小。当a和b共用联合体空间的时候,都是从低地址开始共用空间的。

如果是大端存放:0x12应该在就应该在低地址字节中,通过b访问以char类型来解释空间时,读到的数据就是0x12。

如果是小端存放:0x78放在了低地址字节中,通过b访问以b类型来解释空间时,读到的数据就是0x78。

四、通信中的大小端序

默认串行通信,存在大小端问题。

(1)串行传输时,如果先从MSB开始发送,这就是通信的大端序,通信大端序由于是MSB先被发送,因此也被称为MSB先行。

(2)反之如果先从LSB开始发送,这就是通信的小端序,通信小端序由于是LSB先被发送,因此也被称为LSB先行。

五、大小端序的转换

分为4字节的大小端转换和2字节的大小端的转换。

//2字节大小端转换
uint16_t transfer_2bytes(uint16_t x)
{uint16_t buff = 0;buff = (x << 8) | (x >> 8);//这个比较容易理解return buff;
}
//4字节大小端转换
uint32_t transfer_4bytes(uint32_t x)
{   uint32_t buff = 0;buff = ((x & 0x00ff00ff) << 8) | ((x & 0xff00ff00) >> 8); //这里是关键buff = ((buff & 0x0000ffff) << 16) | ((buff & 0xffff0000) >> 16);//同2字节转换return buff;
}

C语言-MSB/LSB大小端序相关推荐

  1. C语言中的大小端转换与高低位颠倒

    在说大小端高低位之前,肯定要说明数据在计算机内是如何存储的.在计算机中,我们将数据分割成了一个一个的字节(byte),而每个字节又有8位(bit). 一个字节,可以声明为unsigned char型数 ...

  2. Linux一句命令之判断大小端序

    笔者在开发Linux应用程序时,由于判断大小端序的问题,使用的方法是用C语言判断,方法是可以判断得到系统是什么端序,但是太麻烦了.笔者是比较懒的人,不想写那么多代码,想一句命令就解决端序判断的问题. ...

  3. c语言高低位拷贝_C语言中的大小端转换与高低位颠倒

    总结一下最近工作学到的东西,主要是关于大小端与高低位. 在说大小端高低位之前,肯定要说明数据在计算机内是如何存储的.在计算机中,我们将数据分割成了一个一个的字节(byte),而每个字节又有8位(bit ...

  4. C语言——测试电脑大小端

    首先要知道什么大端小端: 大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址 中: 小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存 ...

  5. BUUCTF SimpleRev(涉及大小端序存储的问题)

    ** 逆向reverse小白一枚,欢迎各位师傅指出不足之处. buuctf-SimpleRev ** 考点:大端序,小端序,分析伪代码 做这道题的时候遇到了一个新的知识点,大端序和小端序. 用Exei ...

  6. C语言实现浮点数大小端转化

    操作了一天,终于实现了浮点数的大小端转化.通过VS内存查看对应的二进制存储,发现终于改变了.之前因为类型的转化不当,总是输出不了正确的结果,一定要注意不要发生类型转化.我用了26.5做实验,原本41 ...

  7. c语言32bit数大小端转换,c语言大小端转化

    在工作中遇到一个问题,数据是以大端模式存储的,而机器是小端模式,必须进行转换,否则使用时会出问题. 一.定义: 大端模式(Big Endian):数据的高字节,保存在内存的低地址中:数据的低字节,保存 ...

  8. c语言联合验证大小端存储,2021C语言面试题及答案.docx

    1.关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三 个明显的作用:1)-在函数体,一个被声明为静态的变量在这一函数被调用过 程中维持其值不变.2 ...

  9. 程序员面试系列——大小端

    大小端是哪里来的概念 大端.小端是"字节顺序"里面的概念.字节顺序可以分为大端序.小端序.混合序. 什么是字节顺序 "字节顺序"简称为"字节序&quo ...

最新文章

  1. PIL图像处理开发极简教程
  2. 安卓7.0拍照遇到 Uri暴露错误
  3. 关于关闭浏览器Session就丢失的讨论
  4. 更换Winform 皮肤(上)----使用现有皮肤
  5. I2c 诊断深入解析
  6. 代码重新发布后docker服务会不会受影响_分享点经验 | 浅谈微服务架构
  7. Mybatis-plus 将字段更新为null
  8. Eclipse-无法引用maven依赖的类/没有MavenDependencies/没有buildpath
  9. 到底绿茶能不能减肥瘦小肚子? - 生活至上,美容至尚!
  10. json返回的img图片被原样输出_爬取百度图片,并下载至本地
  11. 安卓beforetextchanged_【已解决】Android中给EditText添加的TextWatcher中的onTextChanged始终被调用(被执行多次)...
  12. 好久没来51cto了。
  13. ps怎么给人物抠图教程详细图解
  14. 使用网络调试助手通过MQTT协议接入到华为云物联网平台
  15. 企业使用云平台,存在的三个问题
  16. linux怎样保存文件,linux不能保存文件如何解决
  17. java -p_javap的作用是什么?
  18. AYITOJ ROUND #1题解
  19. [博弈] LOJ#2471. 「九省联考 2018」一双木棋
  20. Unity3d 周分享(23期 2019.11.10 )

热门文章

  1. matlab 线性系统响应,MATLAB线性系统时域响应分析实验
  2. arcgis中的标注和注记
  3. JS使用Lodop控件打印表单和二维码
  4. 微信小程序添加(成功失败)提示音
  5. srtm数据格式.hgt读取
  6. linux肉鸡检测,一台linux肉鸡的简单手工入侵检测过程
  7. 跳槽需要有一份好的简历
  8. shell导出txt乱码_【转】Shell乱码文件中的控制字符处理
  9. [时序数据趋势预测]论文阅读思考总结[2022.3.25-2022.4.1]
  10. Office2010:为什么我的PPT需要修复?