PyQt5 QtSerialPort校验和字节前缀缺失问题求助(树莓派环境)
PyQt5 QtSerialPort串口发送校验和字节前缀问题解决
问题核心
你遇到的问题是校验和被当作字符串处理,导致发送的是ASCII字符而非目标十六进制字节,最终序列不符合预期。
解决步骤
- 确保校验和是整数类型:不管是手动指定还是计算得出,校验和必须是十六进制整数(比如
0xBC),而非字符串形式的"bc"/"BC"。 - 将整数转为单字节:用
bytes([校验和整数])把整数直接转换为对应的十六进制字节,这样就能生成带\x前缀的目标字节。
代码调整示例
错误写法(导致问题)
# 错误:校验和用字符串拼接,发送的是ASCII字符 checksum_str = "bc" send_data = b'\xCC\x04\x3C\x34\x05' + checksum_str.encode() + b'\x01' # 此时send_data实际为 b'\xcc\x04\x3c\x34\x05\x62\x63\x01',不是预期值
正确写法
# 方法1:直接用十六进制整数 checksum = 0xBC send_data = b'\xCC\x04\x3C\x34\x05' + bytes([checksum]) + b'\x01' # 方法2:如果校验和是字符串转来的,先转整数 checksum_str = "bc" checksum = int(checksum_str, 16) send_data = b'\xCC\x04\x3C\x34\x05' + bytes([checksum]) + b'\x01'
验证
运行代码后打印send_data,输出应为b'\xcc\x04\x3c\x34\x05\xbc\x01',和预期一致,此时串口发送的就是正确的字节序列。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

