Python3 如何实现带\x转义字符串到对应字节的精确转换?
转换失效的核心原因
你当前拿到的偏差结果,本质是编码规则不匹配:
- 你传入的Python字符串中,每个字符对应的Unicode码点值,正好和目标字节串的单字节数值一一对应,所有码点范围都在0~255之间。
- 用
utf-8编码时,码点大于0x7F的字符会被转成长度2~4字节的多字节序列,比如字符串里的'\xff'字符,对应码点0xFF,经utf-8编码会生成b'\xc3\xbf',完全不是单字节的0xFF,因此结果不可能和目标字节串相等。
可实现精确匹配的转换方案
两个经过验证的可行方法,都能完全满足转换要求:
- 使用latin-1(ISO-8859-1)编码转换
这个编码的核心特性是:码点0~255的Unicode字符直接映射为对应数值的单字节,无任何额外编码转换,和你当前的场景完全匹配。实现代码:
验证结果:def f(input_str): return input_str.encode('latin-1')command = '\x66\x08\x01\x01\x01\x04\x00\xff\xff\x04' f(command) == b'\x66\x08\x01\x01\x01\x04\x00\xff\xff\x04' # 返回True - 手动逐字符构建字节串
遍历字符串的每个字符,通过ord()取出字符对应的Unicode码点值,直接用bytes()构造目标字节流,效果和latin-1编码完全一致:def f(input_str): return bytes(ord(char) for char in input_str)
注意:两种方法都仅适用于输入字符串的所有字符码点在0~255区间的场景,若存在码点大于255的字符,方法会直接抛出报错,和当前需求的转换边界完全匹配。
内容的提问来源于stack exchange,提问作者RaJa
相关产品推荐
相关产品推荐

