Python中十六进制字符串转字节串出现多余双反斜杠的解决方法
带\x转义的十六进制字符串转字节串正确实现
首先澄清两个认知偏差:
- 用
bytes.fromhex()时看到\x22显示为双引号,不是转换错误。这是Python字节串的默认显示规则:可打印ASCII字符会直接展示原字符,不会渲染成十六进制转义格式。\x22对应的ASCII字符就是双引号,此时字节的实际数值完全正确,不存在偏差,可以通过索引取值验证:
b = bytes.fromhex('1122334455') print(b[1] == 0x22) # 返回True,值完全匹配
- 直接对字符串调用
.encode()得到双反斜杠结果,是因为字符串中的反斜杠本身是普通字面字符,没有被解析为转义标识,编码后反斜杠会被转成对应字节\x5c,才会出现重复反斜杠的问题。
对应场景的正确实现
场景1:待转换内容是带\x前缀的转义字符串(比如从外部文本读取、用户输入得到的字面量内容)
通过unicode_escape转义规则解析即可:
# 模拟从外部读入的带\x转义的字符串(反斜杠为普通字符) hex_str = r'\x11\x22\x33\x44\x55' result = hex_str.encode('latin1').decode('unicode_escape').encode('latin1') # 验证结果和预期字节完全相等 print(result == b'\x11\x22\x33\x44\x55') # 返回True
场景2:需要输出内容严格显示为b'\x11\x22\x33\x44\x55'格式
如果只是需要显示效果和预期完全一致(所有字节都渲染为\x加两位十六进制形式,不展示可打印原字符),可以手动格式化输出:
b = bytes.fromhex('1122334455') output = "b'" + ''.join(f'\\x{byte:02x}' for byte in b) + "'" print(output) # 直接输出b'\x11\x22\x33\x44\x55'
内容的提问来源于stack exchange,提问作者ImKeelan
相关产品推荐
相关产品推荐

