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

Python中serial.Serial如何处理十六进制字符?求修复方案

问题分析与修复方案

原代码错误原因

你尝试通过'\x3'+i拼接生成十六进制字符的写法不成立:Python中\x后必须跟两位十六进制数字,'\x3'会被自动解析为\x03(补前导0),最终拼接出的是\x031、\x032这类双字符组合,完全不是你需要的\x31、\x32单字节十六进制字符。

修复方案

你的核心需求是将字符串'123'转换为对应ASCII字节(\x31\x32\x33)——字符'1'的ASCII码十六进制就是0x31,'2'对应0x32,以此类推。以下是两种简洁实现方式:

方式1:直接利用字符串编码(推荐)

字符串'123'本身的ASCII编码就是目标十六进制字节序列,直接编码即可:

  • Python 2中(str本身为字节串):
hex_str = '123'
  • Python 3中(串口写入要求bytes类型):
hex_str = '123'.encode('ascii')

方式2:手动转换单字符

如果需要更灵活的字符转十六进制逻辑,可通过chr()函数生成对应ASCII字符:

# Python 2
hex_str = ''.join(chr(0x30 + int(c)) for c in '123')

# Python 3(转为bytes类型)
hex_str = b''.join(chr(0x30 + int(c)).encode('ascii') for c in '123')

原理:字符'0'的ASCII码为0x30,将数字字符转成整数后加0x30,再用chr()生成对应ASCII字符。

修正后的串口写入代码

Python 2:

sel = serial_crt('/dev/tty.usbserial-FTCHMFWZ', 115200)
sel.write('\x05')
sel.write('\x02\x08' + hex_str + '\x03')
sel.write('\x04')

Python 3:

sel = serial_crt('/dev/tty.usbserial-FTCHMFWZ', 115200)
sel.write(b'\x05')
sel.write(b'\x02\x08' + hex_str + b'\x03')
sel.write(b'\x04')

内容的提问来源于stack exchange,提问作者赵小甲

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:42:20