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

Python字节对象打印EBCDIC十六进制\x40而非@的实现方法问询

嘿,我来帮你搞清楚这个问题!

你遇到的是Python字节对象默认打印行为导致的小困惑:当Python输出字节对象时,会自动把对应可打印ASCII字符的字节转换成对应的字符显示,而不是保留十六进制转义序列。比如\x40对应的ASCII字符是@,所以Python就直接显示@,而不是\x40——这是Python为了提升可读性设计的默认逻辑,但确实会在你需要查看原始十六进制转义形式时添堵。

比如你的测试代码如果是这样:

my_bytes = b'\x40'
print(my_bytes)

输出自然就是b'@',和你看到的一致。

那怎么让它显示成\x40呢?你需要手动格式化每个字节的输出,而不是依赖默认打印行为,这里有两种实用方法:

方法1:遍历字节手动格式化

直接遍历字节对象里的每个字节,把它们格式化为\x开头的两位十六进制字符串:

my_bytes = b'\x40'
# 生成纯转义格式的字符串
formatted = ''.join(f'\\x{byte:02x}' for byte in my_bytes)
print(formatted)  # 输出:\x40

# 如果想要保留b''的字节对象样式
formatted_with_bracket = f"b'{formatted}'"
print(formatted_with_bracket)  # 输出:b'\x40'

方法2:用binascii模块辅助(可选)

如果你习惯用binascii处理字节相关操作,也可以先把字节转成十六进制字符串,再拼接\x前缀:

import binascii

my_bytes = b'\x40'
hex_str = binascii.hexlify(my_bytes).decode('ascii')
formatted = '\\x' + hex_str
print(formatted)  # 输出:\x40

这里要提一句:别用repr()函数,它虽然能返回对象的“官方表示”,但同样会优先显示可打印字符,所以repr(my_bytes)还是会输出b'@',达不到你的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:31:55