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

如何让Python始终以十六进制格式打印字节字符串?

如何让Python始终以十六进制格式打印字节字符串?

我太懂这种难受的感觉了!就像你举的例子:把200转成2字节小端字节串,int.to_bytes(200, 2, 'little')会输出b'\xc8\x00',这种全十六进制的格式看着很清爽;但转100的时候,因为100刚好对应ASCII里的'd',Python直接输出b'd\x00',混着字符的格式真的特别不直观,完全不如全十六进制的b'\x64\x00'好读。

先给你最直接的结论:标准CPython解释器里没有全局配置开关能直接改变bytes对象的默认显示格式——就是你想要的那种类似logging.basicConfig的一键设置,目前Python里根本没有对应bytes显示的全局配置项。

为什么会有这种混合显示的情况呢?这是因为bytes对象的__repr__方法(Python用来打印对象的内置逻辑)是硬编码死的:只要字节的数值对应可打印的ASCII字符(范围是32到126,还有制表符\t、换行符\n这类特殊字符会显示成转义序列),就会直接显示成字符;只有不可打印的字节才会用\xXX的十六进制格式。这个逻辑是Python内置的,没法通过全局设置修改。

不过虽然没法改解释器的默认行为,还是有几个方便的小办法能让你看到全十六进制的字节串:

  • 自己写个极简的辅助函数(你也提到自己能写,这里给个简单实现参考):
    def show_full_hex(b):
        # 遍历每个字节,转成\xXX的格式,再拼起来
        hex_str = ''.join(f'\\x{byte:02x}' for byte in b)
        return f"b'{hex_str}'"
    
    用的时候直接调用就行:
    b = int.to_bytes(100, 2, 'little')
    print(show_full_hex(b))  # 输出 b'\x64\x00'
    
  • 如果只是想快速看十六进制的 raw 数据,也可以用binascii.hexlify:
    import binascii
    b = int.to_bytes(100, 2, 'little')
    print(binascii.hexlify(b))  # 输出 b'6400'
    
    虽然不是你想要的b'\x64\x00'格式,但胜在是内置方法不用自己写函数。

最后再明确一下:如果你要的是让Python交互解释器默认就以全十六进制格式显示所有bytes对象,那标准CPython里真的没有这个选项,必须自己处理输出格式才行。

备注:内容来源于stack exchange,提问作者Markus-Hermann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 08:54:52