Как использовать кодировку «hex» в Python 3.2 или выше?

В 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 

На SO есть хотя бы один ответ, в котором упоминается, что hex кодек удален на Python 3. Но затем, согласно документам , он был повторно введен в 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' 

И документы не упоминают об этом (по крайней мере, не там, где я смотрел). Мне нужно пропустить что-то простое, но я не понимаю, что это такое.

Вам нужно пройти через модуль codecs и кодек hex_codec (или его hex псевдоним, если он доступен * ):

 codecs.encode(b'\x12', 'hex_codec') 

* Из документации: «Изменено в версии 3.4: Восстановление псевдонимов для двоичных преобразований» .

Еще один способ использования binascii.hexlify() :

 >>> import binascii >>> binascii.hexlify(b'\x12\x34\x56\x78') b'12345678' 

Использование base64.b16encode() :

 >>> import base64 >>> base64.b16encode(b'\x12\x34\x56\x78') b'12345678' 

binascii методы 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'