py3k中chr()等效的返回字节对象

53 投票
7 回答
29478 浏览
提问于 2025-04-16 08:58

在Python 2.x中,有一个叫做chr()的函数,它可以把0到255之间的数字转换成一个字节字符串,也就是一个字符,字符的数值就是这个数字。而unichr()则是把0到0x10FFFF之间的数字转换成一个Unicode字符串,Unicode字符串也是一个字符,字符的编码就是这个数字。在Python 3.x中,unichr()被替换成了chr(),这是因为Python 3.x默认使用Unicode字符串,但我找不到一个函数能完全做到Python 2.x中chr()的功能。2to3这个工具(从2.6版本开始)在转换时对chr的调用没有做任何处理,这样是不太对的 :(

(这段内容是为了处理一种文件格式,这种格式是明确以8位字节为基础定义的。)

7 个回答

9

又一个替代方案(适用于Python 3.5及以上版本):

>>> b'%c' % 65
b'A'
57

试试下面这个:

b = bytes([x])

比如说:

>>> bytes([255])
b'\xff'
23

可以考虑使用bytearray((255,)),这个在Python2和Python3中都能正常工作。在这两个版本的Python中,得到的bytearray对象可以转换成bytes(obj)。在Python2中,bytes(obj)其实是str()的别名,而在Python3中,bytes(obj)是真正的字节类型。

# Python2
>>> x = bytearray((32,33))
>>> x
bytearray(b' !')
>>> bytes(x)
' !'

# Python3
>>> x = bytearray((32,33))
>>> x
bytearray(b' !')
>>> bytes(x)
b' !'

撰写回答