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

