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

Python to_bytes()问题:将int转为2字节时为何未得预期偶数十六进制表示?

为什么Python的to_bytes返回b'\r\xa2'而不是b'\x0d\xa2'?

你其实没忽略什么——这两个字节串是完全一样的。

原因很简单:\r是ASCII控制字符「回车符」的转义表示,它对应的十六进制值就是0x0d。Python在显示字节串时,会自动把一些可打印的ASCII控制字符转换成更易读的转义符号(比如\r、\n),而不是统一用\xXX的十六进制格式,但底层的字节值完全没变。

验证一下就清楚了:

num = 3490
result = num.to_bytes(2, byteorder='big')

print(result)                  # 输出 b'\r\xa2'
print(result == b'\x0d\xa2')   # 输出 True,说明两者完全等价
print(result[0] == 0x0d)       # 输出 True,第一个字节确实是0x0d

如果非要让输出显示成\x0d\xa2的格式,可以自己手动格式化字节串:

# 逐个字节转成十六进制格式
formatted = ''.join(f'\\x{byte:02x}' for byte in result)
print(formatted)  # 输出 \x0d\xa2

# 或者直接输出十六进制字符串
print(result.hex())  # 输出 0da2,对应\x0d和\xa2的拼接

总结:你的转换结果是完全正确的,只是Python的默认显示方式不同而已。如果只是用于字节流传输、存储等场景,直接用返回的字节串就行,不用管显示形式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:22:35