Python 3 正确将整数转换为字节:

3 投票
2 回答
7502 浏览
提问于 2025-04-18 18:30

关于这个问题的回答让人觉得在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

撰写回答