Python 3 正确将整数转换为字节:
关于这个问题的回答让人觉得在Python 3中,有两种方法可以把一个整数转换成一个bytes
对象。它们分别是:
s = str(n).encode()
和
n = 5
bytes( [n] )
看起来是一样的。但是,测试结果显示它们返回的值其实是不同的:
print(str(8).encode())
#Prints b'8'
不过
print(bytes([8])) #prints b'\x08'
我知道第一种方法是把整数8变成了一个字符串(我想是utf-8
格式),这个字符串的十六进制值是56。那么第二种方法打印出来的是什么呢?那只是8的十六进制值吗?(是utf-8
格式的退格符吗?)
另外,这两种方法得到的结果大小都是一个字节吗?看起来第二种方法有两个字符,也就是两个字节,但我可能错了……
2 个回答
5
b'8'
是一个 bytes
对象,它里面包含了一个字节,这个字节的值是字符 '8'
,也就是数字 56
。
b'\x08'
是一个 bytes
对象,它里面也包含了一个字节,这个字节的值是 8
,这和 0x8
是一样的。
3
这两个例子是不一样的。str(n).encode()
是把你给的东西先转成字符串形式,然后再用像utf8这样的字符编码来编码。而bytes([..])
则是根据你给的数组里的每个值,直接生成一个字节串。这里的表示方式\xFF
实际上是一个单个字节值的十六进制表示。
>>> str(8).encode()
b'8'
>>> b'8' == b'\x38'
True