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,提问作者赵小甲
相关产品推荐
相关产品推荐

