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

如何让Python强制以十六进制格式显示字节内容(禁用ASCII转换)

解决Python打印bytes时自动转ASCII的问题

要让Python打印二进制内容时强制全显示十六进制格式,完全避免ASCII替换,可以用以下几种实用方法:

  • 自定义格式化函数:遍历bytes的每个字节,手动转成\xXX格式

    def print_raw_hex(b):
        hex_str = ''.join(f'\\x{byte:02x}' for byte in b)
        print(f'b"{hex_str}"')
    
    # 测试
    test_bytes = b"\x01\x00\x5C\x78\x33\x34"
    print_raw_hex(test_bytes)
    # 输出:b"\x01\x00\x5c\x78\x33\x34"
    
  • 利用标准库binascii简化处理:借助hexlify先转成十六进制字符串,再拼接格式

    import binascii
    
    test_bytes = b"\x01\x00\x5C\x78\x33\x34"
    hex_raw = binascii.hexlify(test_bytes).decode('ascii')
    formatted = ''.join(f'\\x{hex_raw[i:i+2]}' for i in range(0, len(hex_raw), 2))
    print(f'b"{formatted}"')
    # 输出效果同上
    
  • 针对正则对象的调试:如果要查看re.compile生成的匹配模式,直接提取其pattern属性后用上面的方法格式化

    import re
    import binascii
    
    list_of_subs = [b'\x01\x00', b'\x5c\x78\x33\x34']
    regex_obj = re.compile(b"|".join(list_of_subs))
    
    def format_hex(b):
        return ''.join(f'\\x{byte:02x}' for byte in b)
    
    print(f"正则匹配模式: b\"{format_hex(regex_obj.pattern)}\"")
    # 输出完整十六进制格式的模式字符串
    

Python默认打印bytes时会转ASCII,是因为bytes对象的__repr__方法优先显示可打印字符提升可读性,但对二进制调试不友好,上面的方法完全绕过了默认的格式化逻辑,强制输出纯十六进制格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:15:34