在Python 2中,要获得字符串中十六进制数字的字符串表示,您可以这样做
>>> '\x12\x34\x56\x78'.encode('hex')
'12345678'
在Python 3中,它不再起作用(在Python 3.2和3.3上测试):
>>> '\x12\x34\x56\x78'.encode('hex')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
LookupError: unknown encoding: hex
这里至少有one answer提到在Python 3中删除了hex
编解码器。但是,according to the docs,它在Python 3.2中重新引入,作为“字节到字节映射”。
但是,我不知道如何使这些“字节到字节映射”工作:
>>> b'\x12'.encode('hex')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'encode'
而且文档也没有提到(至少不是我看的地方)。我一定错过了一些简单的东西,但我看不出它是什么。
使用binascii.hexlify()
的另一种方式:
>>> import binascii
>>> binascii.hexlify(b'\x12\x34\x56\x78')
b'12345678'
>>> import base64
>>> base64.b16encode(b'\x12\x34\x56\x78')
b'12345678'
顺便说一句,binascii
方法更容易:
>>> import binascii
>>> x=b'test'
>>> x=binascii.hexlify(x)
>>> x
b'74657374'
>>> y=str(x,'ascii')
>>> y
'74657374'
>>> x=binascii.unhexlify(x)
>>> x
b'test'
>>> y=str(x,'ascii')
>>> y
'test'