将整数集合转为十六进制并通过串口发送的最优方法
最优转换方法:直接生成原始二进制字节
你的当前实现生成的是ASCII编码的十六进制文本字符串(带空格),这不仅会增加串口传输的字节数(原本5个字节变成14个),还做了多余的字符串拼接和编码操作,完全不是最优方案。
串口通信通常需要发送原始二进制字节,直接用Python内置的bytes()函数就能把整数元组转换成可发送的字节对象,这是最高效、最简洁的方式:
frame_tuple = (85, 1, 71, 0, 157) serial_bytes = bytes(frame_tuple) # 输出: b'\x55\x01G\x00\x9d'
这个结果里的G是十进制71对应的ASCII字符(十六进制0x47),Python在打印字节对象时会自动把可打印的ASCII字符显示为对应的字符,不可打印的显示为十六进制转义序列,但本质上就是你需要的0x55 0x01 0x47 0x00 0x9D这5个原始字节,直接传给串口发送函数即可。
特殊情况:如果设备要求发送ASCII格式的十六进制文本
如果你的串口设备确实需要接收不带空格的十六进制文本(比如b'550147009d'),可以用更高效的方式生成:
serial_bytes = b''.join(f'{i:02x}'.encode() for i in frame_tuple) # 输出: b'550147009d'
但这种场景非常少见,绝大多数串口设备都是直接接收原始二进制字节,优先用第一种方法。
内容的提问来源于stack exchange,提问作者Paweł Pietraszko
相关产品推荐
相关产品推荐

