Python使用int.to_bytes方法整数转bytes输出异常问题咨询
问题原理说明
这一现象和int.to_bytes转换逻辑无关,是Python对bytes对象的默认展示规则导致的,实际转换得到的二进制值完全符合你的预期。
核心规则
Python输出bytes对象的字符串形式时,会对每个字节做如下判断:
- 如果字节值对应ASCII范围内的可打印普通字符,直接显示为对应字符
- 如果字节值对应ASCII范围内的标准转义控制字符,显示为对应的转义序列(比如
\n、\t) - 其余不可打印、无标准转义的字节,才会显示为
\xHH格式的十六进制表示
对应测试用例解释
- 整数31对应的ASCII值是不可打印的控制字符,没有对应标准转义序列,所以直接显示为
b'\x1f',符合预期 - 整数10对应的ASCII值是换行符,属于有标准转义序列的控制字符,Python会优先显示为
b'\n',但它和你预期的b'\x0a'完全等价,执行b'\n' == b'\x0a'结果为True - 整数50对应的ASCII值是可打印字符
2,所以直接显示为b'2',和你预期的b'\x32'完全等价,执行b'2' == b'\x32'结果为True
查看十六进制原始值的方法
如果你需要统一查看所有字节的十六进制形式,可以调用bytes对象的hex()方法:
b1 = (10).to_bytes(1, 'big') print(b1.hex()) # 输出 0a b2 = (50).to_bytes(1, 'big') print(b2.hex()) # 输出 32
内容的提问来源于stack exchange,提问作者Nhat Thanh
相关产品推荐
相关产品推荐

