Ответ 1
Вам нужно пройти через модуль codecs
и hex_codec
кодек (или его hex
, если доступно *):
codecs.encode(b'\x12', 'hex_codec')
* Из документации: "Изменено в версии 3.4: Восстановление псевдонимов для двоичных преобразований".
В 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
методы проще:
>>> 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'