我们知道,浮点型float数据类型占用4个字节,实际上在内存当中a = 0x43678000,只是嵌入式芯片访问a时,知道a是浮点型数据,所以一次性读取4个字节,而且也按照浮点型的数据表示规定,将a转换为十进制的可读数据231.5。
如果我们从串口接收到4个字节数据{0x43,0x67,0x80,0x00},如何把这4个字节的数据转换为float型呢?
直接令float a = 0x43678000这是不行的(不信的读者可以自行验证),这就是串口通讯当中经常遇到的问题,如果数据传输中包括了浮点型数据,在这里我们可以通过共用体或者结构体来解决。
对于共用体:
f 的4个字节和s[4]的4个字节是共用一个区域,如果我们令f = 231.5,然后通过监视窗查看s[4]的数值,下面是测试程序:
监视结果如下所示:
我们同样适用结构体做了相同的实验,将数组s[4]={0x00,0x80,0x67,0x43}的首地址s[0]强制转换赋值给结构体z,最后打印输出的结果也是231.5这里我们看到原本应该是0x4367_8000的数据实际存储的时候变成了00h 80h 67h 43h,这是因为计算机系统使用了小端存储。
什么是小端存储呢?
我们都知道,对于一个超过一个字节的数据,其在计算机中的存储需要跨越字节。某些机器选择在存储器中按照从最低为有效字节到最高有效字节的顺序存储对象,而另一些机器则按照从最高为有效字节到到最低为有效字节的顺序存储,前一种存储方式被称为小端存储,后一种方式被称为大端存储。
举个例子,对于十六进制数0x01234567,其字节的存储顺序便依赖于机器,如下:
我们可以通过下面的函数测试是大端存储还是小端存储:
硅光产业链的整体发展现状
力科领先工业产品亮相2011 DsignCon
雷士照明交付徐州地铁2号线照明解决方案
联想ThinkPad X1折叠屏笔记本原型上手 成熟度很高
Escobar发布新款折叠屏手机 售价仅399美元
串口数据传输中的共用体和结构体如何转换?
安费诺数据中心解决方案的明星产品介绍
简析毫米波雷达的原理及其产业链
北方华创市场表现不佳背后露出的是与国际主流先进制程工艺潮流的差距
PLC需要实现远程监控功能并提升性价比,已成为用户的理想需求
通过UltraScale集成以太网节省功耗
简仪科技助力薄膜铂电阻测试项目顺利开发
土壤养分检测仪的技术参数
刘振亚:未来全球能源电力形势
清华大学AIGC发展研究报告1.0版震撼发布!192页PPT
iPhoneXR成美国最畅销的iPhone 占所有iPhone型号销量的32%
Zeland IE3D在3D结构的电磁场仿真优化中的计算案例
深度学习与神经网络推动AI芯片市场以约40%的年成长率持续扩张
佳能Pixma CD磁盘托盘的制作
15KHZ-20KHZ超声波数字焊接电源发生器