py3k中chr()等效的返回字节对象
在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' !'