如何将UART传输收到的char数组还原为对应的32位float数值
字节数组转float实现方案
原理说明
你在C端直接通过指针获取float内存地址的写法,本质是传输IEEE 754标准的32位单精度浮点数原生字节序列,单精度float固定占4字节,你收到的6字节列表中前4位[236, 81, 43, 66]就是对应42.83的有效字节,后2位为额外传输数据,解析float时仅需要截取前4位即可。
Python实现代码
Python标准库struct模块专门用来处理字节序列和基础类型的互转,直接调用即可:
import struct # 你收到的原始字节列表 raw_list = [236, 81, 43, 66, 4, 42] # 截取前4个有效字节转为bytes类型 float_bytes = bytes(raw_list[:4]) # 按小端序解析32位单精度浮点数,<表示小端,f表示单精度float result = struct.unpack('<f', float_bytes)[0] print(result) # 输出为42.83000183105469,属于单精度浮点数正常精度误差,可按需保留小数位
注意事项
- 如果解析出来数值不对,大概率是字节序不匹配,把格式符里的
<换成>切换为大端序重试即可,字节序取决于你发送端设备的CPU架构,常见的ARM、x86都是小端序。 - 如果传输多个float,每次按顺序截取4字节解析即可,注意和你的传输协议对齐避免错位。
内容的提问来源于stack exchange,提问作者emirgo
相关产品推荐
相关产品推荐

