На этом шаге мы рассмотрим способы решения этой задачи.
Вам нужно декодировать строку шестнадцатеричных цифр в байтовую строку или закодировать байтовую строку в шестнадцатеричное представление.
Если вам просто нужно декодировать или закодировать сырую строку шестнадцатеричных цифр, используйте модуль binascii. Например:
>>> # Изначальная байтовая строка >>> s = b'hello' >>> # Закодировать в hex >>> import binascii >>> h = binascii.b2a_hex(s) >>> h b'68656c6c6f' >>> # Декодировать обратно в байты >>> binascii.a2b_hex(h) b'hello' >>>
Похожую функцию можно найти в модуле base64. Например:
>>> import base64 >>> h = base64.b16encode(s) >>> h b'68656C6C6F' >>> base64.b16decode(h) b'hello' >>>
По большей части конвертирование в шестнадцатеричную форму и из шестнадцатеричной формы с помощью показанных приемов не составляет труда. Главная разница между этими двумя техниками заключается в приведении к регистру. Функции base64.b16decode() и base64.b16encode() работают только с шестнадцатеричными символами в верхнем регистре, а функции из модуля binascii могут работать с обоими регистрами.
Также важно отметить, что вывод, который производят кодирующие функции, всегда является байтовой строкой. Чтобы принудительно вывести его в Unicode, вам придется добавить дополнительный шаг декодирования. Например:
>>> h = base64.b16encode(s) >>> print(h) b'68656C6C6F' >>> print(h.decode('ascii')) 68656C6C6F >>>
При декодировании шестнадцатеричных цифр функции b16decode() и a2b_hex() принимают и байтовые, и юникодовые строки. Однако эти строки должны содержать только закодированные в ASCII шестнадцатеричные цифры.
На следующем шаге мы рассмотрим кодирование и декодирование в Base64.