为什么`(33).to_bytes(2,'big')`返回'b'\ x00!'`而不是'b'\ x00 \ x21'`?

时间:2016-09-21 17:04:30

标签: python python-3.2

我在使用Python将int转换为字节时遇到了问题。

这有效 -

>>> (1024).to_bytes(2, 'big')
b'\x04\x00'  

然而,这并不像我期望的那样 -

>>> (33).to_bytes(2, 'big')
b'\x00!'

我不理解什么?

3 个答案:

答案 0 :(得分:6)

十进制值33通过ASCII标准映射到字符!,因此解释器可以在不使用转义码的情况下显示它:

>>> b'\x21' * 3
b'!!!'

当打印一个字节对象时,python将其视为一个字符序列(每个字符都保存为一个字节,每个字节通常使用一个8位的内存,映射成2个十六进制数字值,例如0x21 => 0b 0010 0001 => 33 ),因此具有相应可打印ASCII字符的值显示为其ASCII字符,其余值由其十六进制值表示(格式为\xDD)。

答案 1 :(得分:3)

根据文件 - > https://docs.python.org/3.3/library/stdtypes.html

{ "_id" : null, "count" : 3 }

答案 2 :(得分:1)

您不理解!是ASCII字符33,相当于\x21。这个字节串正是你要求的字节串;它只是没有按照你期望的方式显示。