如何将Arduino CAN消息的十六进制字节串转为Python双精度浮点数
解决方法
步骤1:提取十六进制数据段
先从串口接收的字节串里,拆分出目标十六进制数据部分:
# 模拟串口接收的消息 serial_msg = b'0006.381 RX: [00000004](00) 3F FE D8 55 80 00 00 00 \r\n' # 转字符串后按空格分割,取最后8个元素(对应8字节CAN数据) hex_parts = serial_msg.decode().split()[-8:]
步骤2:转换为bytes对象
用Python内置的bytes.fromhex()方法,直接把拼接后的十六进制字符串转成目标bytes格式:
# 去掉空格拼接成连续十六进制字符串 hex_str = ''.join(hex_parts) # 转换为bytes对象 data_bytes = bytes.fromhex(hex_str) # 此时data_bytes就是你需要的b'\x3F\xFE\xD8\x55\x80\x00\x00\x00'
步骤3:解析为双精度浮点数
结合你已使用的struct.unpack完成最终转换:
import struct float_result = struct.unpack('>d', data_bytes)[0] print(float_result) # 输出 1.9278159141540527
完整代码示例
import struct # 串口接收的原始消息 serial_msg = b'0006.381 RX: [00000004](00) 3F FE D8 55 80 00 00 00 \r\n' # 提取并转换十六进制数据 hex_str = ''.join(serial_msg.decode().split()[-8:]) data_bytes = bytes.fromhex(hex_str) # 解析为浮点数 final_float = struct.unpack('>d', data_bytes)[0] print(final_float)
内容的提问来源于stack exchange,提问作者Sebastian Schulz
相关产品推荐
相关产品推荐

