Python调用to_bytes返回结果与预期不符,是否为编码打印问题?
问题解答
这个差异完全是Python字节串的打印展示规则导致的,字节本身的实际内容没有任何区别。
Python打印字节串时有固定的逻辑:如果字节值对应ASCII可打印字符,就直接显示该字符,不会用\x加十六进制的转义格式展示。大写字母X的ASCII编码恰好就是十六进制的0x58,所以你看到的X和你预期的\x58在字节层面是完全等价的。
你可以通过两个方式直接验证:
- 直接对比两个字节串的相等性:运行
b'\x00\x00\x00\x00\x00\x00\x04X' == b'\x00\x00\x00\x00\x00\x00\x04\x58',返回结果为True - 强制输出字节串的全十六进制格式:运行
(1112).to_bytes(8, 'big').hex(),会得到0000000000000458,和你预期的数值完全匹配
反向转换为整数结果仍为1112,也直接证明了字节存储的数值没有任何偏差,不存在实际内容错误。
内容的提问来源于stack exchange,提问作者Lucas Karpinski
相关产品推荐
相关产品推荐

