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

Python中input输入转义十六进制字符结果不符问题求解

问题原因

你在代码中直接书写的\x开头序列属于Python字符串字面量的转义规则,会被Python解释器在代码解析阶段直接转换为对应ASCII码的单个字符,因此'\x69\x6A\x6B'本质就是i、j、k三个字符,长度为3。
而input()函数获取的是用户输入的原始文本,不会自动解析转义序列:你输入的\x69会被识别为\、x、6、9四个独立字符,三组共12个字符,编码后反斜杠会被二次转义,就得到了b'\\x69\\x6A\\x6B'的结果。

解决方法

方法1:使用unicode_escape解析转义(兼容带普通字符的输入)

如果你的输入除了\x转义序列外还包含普通可打印字符,可以用该方法直接按照Python字符串转义规则解析输入:

raw_input = input('?')
# 先将原始输入按latin1编码转为字节串,再用unicode_escape解码完成转义解析
parsed_str = raw_input.encode('latin1').decode('unicode_escape')
# 编码后即可得到你需要的字节序列
target_bytes = parsed_str.encode()
print(target_bytes) # 输入\x69\x6A\x6B时输出b'ijk'

方法2:直接提取十六进制值转字节(更适合串口通信场景)

如果你输入的内容全部是\x开头的十六进制转义,用该方法更稳妥,不会意外解析\n、\t等其他转义序列:

raw_input = input('?')
# 去除所有\x前缀得到连续十六进制字符串
hex_content = raw_input.replace('\\x', '')
# 直接将十六进制字符串转为对应字节
target_bytes = bytes.fromhex(hex_content)
print(target_bytes) # 输入\x69\x6A\x6B时输出b'ijk'

拿到target_bytes后直接通过pyserial的write方法发送即可。

内容的提问来源于stack exchange,提问作者idlemarvel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:24:05