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

PySerial字节命令功能异常 十六进制数组转bytes函数失效问题

问题产生原因
  • 混淆了Python源码层面的字节串转义语法和运行时的字符串拼接逻辑:在源码里直接写b'\xE9'时,\xE9是Python解释器解析代码阶段就会处理的转义序列,会被直接识别为值为0xE9的单个字节,这个转义处理只在源码解析阶段生效,无法通过运行时拼接字符串复现。
  • 函数中使用原始字符串前缀r拼接\x和十六进制片段,运行时生成的是包含字面量反斜杠、字符x、两位十六进制数的普通文本——比如拼接'E9'得到的是4个字符组成的子串\xE9(反斜杠、x、E、9各占一个字符位),根本不是转义后的单字节。
  • 后续用latin-1编码时,这些字面量字符会被逐个编码:反斜杠编码为0x5C、x编码为0x78,最终生成的字节串长度是预期的4倍。你打印错误结果看到的\\x就是字节里真实存在反斜杠字符的证明,内容完全不符合设备要求的协议格式,自然无法驱动设备。
修复方法

不要尝试手动拼接\x转义序列,直接把每个两位十六进制字符串转为对应的0-255整数值,再传入字节构造函数生成目标字节串即可,代码简洁且不会出错:

def string_to_command(inp):
    return bytes(int(hex_str, 16) for hex_str in inp)

用测试用例验证效果:

input_array = ['E9', '01','06','57','4A','01','F4','01','01','EF']
# 自定义函数输出
print(string_to_command(input_array))
# 字面量定义的预期输出
print(b'\xE9\x01\x06\x57\x4A\x01\xF4\x01\x01\xEF')

运行后两者输出完全一致,生成的字节串符合协议要求,可以正常驱动设备:

b'\xe9\x01\x06WJ\x01\xf4\x01\x01\xef'
b'\xe9\x01\x06WJ\x01\xf4\x01\x01\xef'

内容的提问来源于stack exchange,提问作者Dr. Ernesto Chinchilla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:45:42