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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:54:32