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

如何让CPython始终以\x格式显示字节的十六进制值

让CPython始终以\x十六进制格式显示所有字节的方法

我太懂这种别扭的感觉了——明明字节数据是对的,但CPython偏要把那些对应可打印ASCII字符的字节换成字符显示,比如0x70变成'p'、0x0D变成'\r',导致输出格式不统一,看着特别难受。

其实解决方法很简单,我们可以自己实现一个格式化函数,强制把每个字节都转换成\xHH的十六进制格式:

基础实现:输出纯十六进制格式字符串

def format_bytes_to_full_hex(byte_obj):
    # 遍历每个字节,格式化为\x开头的两位十六进制字符串
    return ''.join(f'\\x{byte:02x}' for byte in byte_obj)

用法演示

假设你的原始数值是a = 0xd8cdb78070b4c55a818665aa0d02dfda,转换后使用这个函数:

a = 0xd8cdb78070b4c55a818665aa0d02dfda
byte_data = a.to_bytes(16, "big")
print(format_bytes_to_full_hex(byte_data))

输出会是统一的\x格式:

\xd8\xcd\xb7\x80\x70\xb4\xc5\x5a\x81\x86\x65\xaa\x0d\x02\xdf\xda

进阶:模拟Python字节字面量格式

如果你希望输出更贴近原生字节对象的显示风格(带b'前缀和结尾引号),可以修改函数:

def format_bytes_as_literal(byte_obj):
    hex_parts = ''.join(f'\\x{byte:02x}' for byte in byte_obj)
    return f"b'{hex_parts}'"

调用后输出:

b'\xd8\xcd\xb7\x80\x70\xb4\xc5\x5a\x81\x86\x65\xaa\x0d\x02\xdf\xda'

验证数据正确性

不用担心这个格式化会改变字节数据本身,你可以像之前一样验证:

# 把格式化后的字符串转回字节对象(处理转义字符)
formatted_str = format_bytes_to_full_hex(byte_data)
restored_bytes = bytes(formatted_str.encode().decode('unicode-escape'), 'latin-1')
# 转回去验证数值一致性
assert hex(int.from_bytes(restored_bytes, "big")) == hex(a)

这样就能保证显示格式完全符合你的需求,同时字节数据的准确性不受影响。

内容的提问来源于stack exchange,提问作者Joachim Strömbergson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:02:39