You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 10:22:07