C语言-MSB/LSB大小端序
一、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大小端序相关推荐
- C语言中的大小端转换与高低位颠倒
在说大小端高低位之前,肯定要说明数据在计算机内是如何存储的.在计算机中,我们将数据分割成了一个一个的字节(byte),而每个字节又有8位(bit). 一个字节,可以声明为unsigned char型数 ...
- Linux一句命令之判断大小端序
笔者在开发Linux应用程序时,由于判断大小端序的问题,使用的方法是用C语言判断,方法是可以判断得到系统是什么端序,但是太麻烦了.笔者是比较懒的人,不想写那么多代码,想一句命令就解决端序判断的问题. ...
- c语言高低位拷贝_C语言中的大小端转换与高低位颠倒
总结一下最近工作学到的东西,主要是关于大小端与高低位. 在说大小端高低位之前,肯定要说明数据在计算机内是如何存储的.在计算机中,我们将数据分割成了一个一个的字节(byte),而每个字节又有8位(bit ...
- C语言——测试电脑大小端
首先要知道什么大端小端: 大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址 中: 小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存 ...
- BUUCTF SimpleRev(涉及大小端序存储的问题)
** 逆向reverse小白一枚,欢迎各位师傅指出不足之处. buuctf-SimpleRev ** 考点:大端序,小端序,分析伪代码 做这道题的时候遇到了一个新的知识点,大端序和小端序. 用Exei ...
- C语言实现浮点数大小端转化
操作了一天,终于实现了浮点数的大小端转化.通过VS内存查看对应的二进制存储,发现终于改变了.之前因为类型的转化不当,总是输出不了正确的结果,一定要注意不要发生类型转化.我用了26.5做实验,原本41 ...
- c语言32bit数大小端转换,c语言大小端转化
在工作中遇到一个问题,数据是以大端模式存储的,而机器是小端模式,必须进行转换,否则使用时会出问题. 一.定义: 大端模式(Big Endian):数据的高字节,保存在内存的低地址中:数据的低字节,保存 ...
- c语言联合验证大小端存储,2021C语言面试题及答案.docx
1.关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三 个明显的作用:1)-在函数体,一个被声明为静态的变量在这一函数被调用过 程中维持其值不变.2 ...
- 程序员面试系列——大小端
大小端是哪里来的概念 大端.小端是"字节顺序"里面的概念.字节顺序可以分为大端序.小端序.混合序. 什么是字节顺序 "字节顺序"简称为"字节序&quo ...
最新文章
- PIL图像处理开发极简教程
- 安卓7.0拍照遇到 Uri暴露错误
- 关于关闭浏览器Session就丢失的讨论
- 更换Winform 皮肤(上)----使用现有皮肤
- I2c 诊断深入解析
- 代码重新发布后docker服务会不会受影响_分享点经验 | 浅谈微服务架构
- Mybatis-plus 将字段更新为null
- Eclipse-无法引用maven依赖的类/没有MavenDependencies/没有buildpath
- 到底绿茶能不能减肥瘦小肚子? - 生活至上,美容至尚!
- json返回的img图片被原样输出_爬取百度图片,并下载至本地
- 安卓beforetextchanged_【已解决】Android中给EditText添加的TextWatcher中的onTextChanged始终被调用(被执行多次)...
- 好久没来51cto了。
- ps怎么给人物抠图教程详细图解
- 使用网络调试助手通过MQTT协议接入到华为云物联网平台
- 企业使用云平台,存在的三个问题
- linux怎样保存文件,linux不能保存文件如何解决
- java -p_javap的作用是什么?
- AYITOJ ROUND #1题解
- [博弈] LOJ#2471. 「九省联考 2018」一双木棋
- Unity3d 周分享(23期 2019.11.10 )
热门文章
- matlab 线性系统响应,MATLAB线性系统时域响应分析实验
- arcgis中的标注和注记
- JS使用Lodop控件打印表单和二维码
- 微信小程序添加(成功失败)提示音
- srtm数据格式.hgt读取
- linux肉鸡检测,一台linux肉鸡的简单手工入侵检测过程
- 跳槽需要有一份好的简历
- shell导出txt乱码_【转】Shell乱码文件中的控制字符处理
- [时序数据趋势预测]论文阅读思考总结[2022.3.25-2022.4.1]
- Office2010:为什么我的PPT需要修复?