我在使用Python将int转换为字节时遇到了问题。
这有效 -
>>> (1024).to_bytes(2, 'big')
b'\x04\x00'
然而,这并不像我期望的那样 -
>>> (33).to_bytes(2, 'big')
b'\x00!'
我不理解什么?
答案 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
。这个字节串正是你要求的字节串;它只是没有按照你期望的方式显示。