Модуль binascii
содержит ряд методов для преобразования между двоичными и различными двоичными представлениями в кодировке ASCII. Обычно эти функции не используются напрямую, а вместо них используются модули-оболочки, такие как uu
, base64
или binhex
. Модуль binascii
содержит низкоуровневые функции, написанные на C для большей скорости, для использования модулями более высокого уровня.
Обратите внимание, что функции a2b_*
принимают строки Unicode, содержащие только символы ASCII. Другие функции принимают только объекты, подобные байтам (например, байты, массив байтов и другие объекты, поддерживающие протокол буфера).
binascii
определяет следующие функции:binascii.a2b_uu()
,binascii.b2a_uu()
,binascii.a2b_base64()
,binascii.b2a_base64()
,binascii.a2b_qp()
,binascii.b2a_qp()
,binascii.a2b_hqx()
,binascii.rledecode_hqx()
,binascii.rlecode_hqx()
,binascii.b2a_hqx()
,binascii.crc_hqx()
,binascii.crc32()
,binascii.b2a_hex()
,binascii.hexlify()
,binascii.b2a_hex()
,binascii.hexlify()
,binascii.b2a_hex()
,binascii.b2a_hex()
,binascii.a2b_hex()
,binascii.unhexlify()
.binascii.a2b_uu(string)
:Функция binascii.a2b_uu()
преобразует одну строку данных string
, закодированных в формате uuencoded
, обратно в двоичный формат и возвращает двоичные данные. Строки обычно содержат 45 (двоичных) байтов, за исключением последней строки. За строковыми данными может следовать пробел.
binascii.b2a_uu(data, *, backtick=False)
:Функция binascii.b2a_uu()
преобразует двоичные данные data
в строку символов ASCII, возвращаемое значение - преобразованная строка, включая символ новой строки. Длина данных должна быть не более 45. Если аргумент backtick=True
, то '`' будет представлена нулями вместо пробелов.
Изменено в версии 3.7: Добавлен аргумент backtick
.
binascii.a2b_base64(string)
:Функция binascii.a2b_base64()
преобразует блок данных, представленных как строка base64
обратно в двоичный формат, который и возвращает. За один раз можно пройти более одной строки.
binascii.b2a_base64(data, *, newline=True)
:Функция binascii.b2a_base64()
преобразует двоичные данные data
в строку символов ASCII в кодировке base64
. Возвращаемое значение представляет собой преобразованную строку, включая символ новой строки, если аргумент newline=True
. Вывод этой функции соответствует RFC 3548.
Изменено в версии 3.6: Добавлен аргумент
newline
.
binascii.a2b_qp(data, header=False)
:Функция binascii.a2b_qp()
преобразует блок данных data
для печати в кавычках - обратно в двоичные данные. За один раз можно пройти более одной строки. Если необязательный аргумент header
присутствует и имеет значение True
, то символы подчеркивания будут расшифрованы как пробелы.
binascii.b2a_qp(data, quotetabs=False, istext=True, header=False)
:Функция binascii.b2a_qp()
преобразует двоичные данные data
в строку(и) символов ASCII в кодировке для печати в кавычках. Возвращаемое значение - преобразованная строка (строки).
quotetabs
присутствует и имеет значение True
, все табуляции и пробелы будут закодированы. istext
присутствует и имеет значение True
, то новые строки не кодируются, но конечные пробелы будут кодироваться. header
присутствует и имеет значение True
, то пробелы будут кодироваться как символы подчеркивания в соответствии с RFC 1522. Если header=False
, то символы новой строки также будут закодированы, в противном случае преобразование перевода строки \n
может повредить поток двоичных данных.binascii.a2b_hqx(string)
:Функция binascii.a2b_hqx()
преобразует данные ASCII в формате binhex4
в двоичный формат, не выполняя RLE-декомпрессию. Строка должна содержать полное количество двоичных байтов или (в случае последней части данных binhex4
) содержать оставшиеся биты, равные нулю.
Функция устарела с версии Python 3.9.
binascii.rledecode_hqx(data)
:Функция binascii.rledecode_hqx()
выполняет RLE-декомпрессию данных в соответствии со стандартом binhex4
. Алгоритм использует 0x90 после байта в качестве индикатора повторения, за которым следует счетчик. Значение 0 указывает байтовое значение 0x90. Процедура возвращает распакованные данные, если только входные данные не заканчиваются индикатором потерянного повтора, и в этом случае возникает неполное исключение.
Функция устарела с версии Python 3.9.
binascii.rlecode_hqx(data)
:Функция binascii.rlecode_hqx()
выполняет RLE-сжатие данных в стиле binhex4
.
Функция устарела с версии Python 3.9.
binascii.b2a_hqx(data)
:Функция binascii.b2a_hqx()
выполняет преобразование двоичного кода hexbin4
в ASCII и возвращает результирующую строку. Аргумент уже должен быть закодирован RLE и иметь длину, кратную 3 (за исключением, возможно, последнего фрагмента).
Функция устарела с версии Python 3.9.
binascii.crc_hqx(data, value)
:Функция binascii.crc_hqx()
вычисляет 16-битное значение CRC данных, начиная со значения в качестве начального CRC. При этом используется многочлен CRC-CCITT x16 + x12 + x5 + 1, часто представленный как 0x1021. Этот CRC используется в формате binhex4
.
binascii.crc32(data[, value])
:Функция binascii.crc32()
вычисляет CRC-32, 32-разрядную контрольную сумму данных без знака, начиная с начального значения CRC. Начальный CRC по умолчанию равен нулю. Алгоритм согласуется с контрольной суммой ZIP-файла. Так как алгоритм предназначен для использования в качестве алгоритма контрольной суммы, он не подходит для использования в качестве общего хэш-алгоритма.
Используйте следующим образом:
>>> print(binascii.crc32(b"hello world")) # Или в двух частях >>> crc = binascii.crc32(b"hello") >>> crc = binascii.crc32(b" world", crc) >>> print('crc32 = {:#010x}'.format(crc))
binascii.hexlify(data[, sep[, bytes_per_sep=1]])
binascii.b2a_hex(data[, sep[, bytes_per_sep=1]])
:Функция binascii.hexlify()
возвращает шестнадцатеричное представление двоичных данных. Каждый байт данных преобразуется в соответствующее 2-разрядное шестнадцатеричное представление. Таким образом, возвращаемый объект байтов в два раза превышает длину данных.
У функции binascii.b2a_hex()
аналогичная функциональность (но возвращающая текстовую строку) также удобно доступна с помощью метода bytes.hex()
.
Если указан sep
, то это должен быть односимвольный объект str
или bytes
. Он будет вставлен в вывод после каждого входного байта bytes_per_sep
. Размещение разделителя, по умолчанию, считается с правого конца вывода, если необходимо считать слева, то укажите отрицательное значение bytes_per_sep
.
>>> import binascii >>> binascii.b2a_hex(b'\xb9\x01\xef') # b'b901ef' >>> binascii.hexlify(b'\xb9\x01\xef', '-') # b'b9-01-ef' >>> binascii.b2a_hex(b'\xb9\x01\xef', b'_', 2) # b'b9_01ef' >>> binascii.b2a_hex(b'\xb9\x01\xef', b' ', -2) # b'b901 ef'
binascii.unhexlify(hexstr)
binascii.a2b_hex(hexstr)
:Функция binascii.unhexlify()
возвращает двоичные данные, представленные шестнадцатеричной строкой hexstr
. Эта функция обратна binascii.b2a_hex()
. Аргумент hexstr
должен содержать четное количество шестнадцатеричных цифр (которые могут быть в верхнем или нижнем регистре), в противном случае возникает исключение binascii.Error
.
У функции binascii.a2b_hex()
аналогичная функциональность (принимающая только аргумент текстовой строки hexstr
, но более либеральная по отношению к пробелам) также доступна с использованием метода класса bytes.fromhex()
.
binascii.Error
:Исключение binascii.Error
возникает при ошибках. Обычно это ошибки программирования.
binascii.Incomplete
:Исключение binascii.Incomplete
поднимается на неполных данных. Обычно это не ошибки программирования, но их можно устранить, прочитав немного больше данных и повторив попытку.