如何让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
相关产品推荐
相关产品推荐

