binascii
— Преобразование между двоичным кодом и ASCII¶
Модуль binascii
содержит ряд методов для преобразования между двоичным и различными двоичными представлениями в кодировке ASCII. Обычно вы не используете эти функции напрямую, а применяете модули-обертки, такие как base64
. Модуль binascii
содержит низкоуровневые функции, написанные на языке C для повышения скорости работы, которые используются модулями более высокого уровня.
Примечание
Функции a2b_*
принимают строки Юникода, содержащие только символы ASCII. Другие функции принимают только bytes-like objects (например, bytes
, bytearray
и другие объекты, поддерживающие буферный протокол).
Изменено в версии 3.3: Строки юникода только ASCII теперь принимаются функциями a2b_*
.
Модуль binascii
определяет следующие функции:
- binascii.a2b_uu(string)¶
Преобразуйте одну строку данных в кодировке uuencoded в двоичную форму и верните двоичные данные. Строки обычно содержат 45 (двоичных) байт, за исключением последней строки. После данных строки могут следовать пробельные символы.
- binascii.b2a_uu(data, *, backtick=False)¶
Преобразование двоичных данных в строку символов ASCII, возвращаемое значение - преобразованная строка, включая символ новой строки. Длина data должна быть не более 45. Если backtick равен true, то нули вместо пробелов будут представлены символами
'`'
.Изменено в версии 3.7: Добавлен параметр backtick.
- binascii.a2b_base64(string, /, *, strict_mode=False)¶
Преобразует блок данных base64 в двоичный формат и возвращает двоичные данные. Одновременно может быть передано более одной строки.
Если значение strict_mode равно true, будут преобразованы только корректные данные base64. Недействительные данные base64 будут преобразованы в
binascii.Error
.Действительный base64:
Соответствует RFC 3548.
Содержит только символы из алфавита base64.
Не содержит избыточных данных после набивки (включая избыточную набивку, новые строки и т.д.).
Не начинается с прокладки.
Изменено в версии 3.11: Добавлен параметр strict_mode.
- binascii.b2a_base64(data, *, newline=True)¶
Преобразование двоичных данных в строку символов ASCII в кодировке base64. Возвращаемое значение - преобразованная строка, включая символ новой строки, если newline равен true. Выходные данные этой функции соответствуют RFC 3548.
Изменено в версии 3.6: Добавлен параметр newline.
- binascii.a2b_qp(data, header=False)¶
Преобразует блок данных, напечатанных в кавычках, в двоичный формат и возвращает двоичные данные. Одновременно может быть передано более одной строки. Если дополнительный аргумент header присутствует и равен true, подчеркивания будут декодированы как пробелы.
- binascii.b2a_qp(data, quotetabs=False, istext=True, header=False)¶
Преобразование двоичных данных в строку(и) символов ASCII в кодировке quoted-printable. Возвращаемое значение - преобразованная строка(и). Если присутствует необязательный аргумент quotetabs и он равен true, все табуляции и пробелы будут закодированы. Если необязательный аргумент istext присутствует и равен true, новые строки не будут кодироваться, но будут кодироваться пробельные символы в конце строки. Если необязательный аргумент header присутствует и равен true, то пробелы будут кодироваться как подчеркивания в соответствии с RFC 1522. Если необязательный аргумент header присутствует и равен false, символы новой строки также будут закодированы; в противном случае преобразование перевода строки может испортить поток двоичных данных.
- binascii.crc_hqx(data, value)¶
Вычислите 16-битное CRC-значение data, начиная с value в качестве начального CRC, и верните результат. Для этого используется полином CRC-CCITT x16 + x12 + x5 + 1, часто представляемый как 0x1021. Этот CRC используется в формате binhex4.
- binascii.crc32(data[, value])¶
Вычислить CRC-32, беззнаковую 32-битную контрольную сумму данных, начиная с начального CRC, равного значению. По умолчанию начальный CRC равен нулю. Алгоритм соответствует контрольной сумме ZIP-файла. Поскольку алгоритм предназначен для использования в качестве алгоритма контрольной суммы, он не подходит для использования в качестве общего хэш-алгоритма. Используйте следующим образом:
print(binascii.crc32(b"hello world")) # Or, in two pieces: crc = binascii.crc32(b"hello") crc = binascii.crc32(b" world", crc) print('crc32 = {:#010x}'.format(crc))
Изменено в версии 3.0: Результат всегда беззнаковый.
- binascii.b2a_hex(data[, sep[, bytes_per_sep=1]])¶
- binascii.hexlify(data[, sep[, bytes_per_sep=1]])¶
Возвращает шестнадцатеричное представление двоичного числа data. Каждый байт data преобразуется в соответствующее двузначное шестнадцатеричное представление. Поэтому возвращаемый объект bytes в два раза длиннее, чем длина data.
Аналогичный функционал (но возвращающий текстовую строку) также удобно реализовать с помощью метода
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'
Изменено в версии 3.8: Добавлены параметры sep и bytes_per_sep.
- binascii.a2b_hex(hexstr)¶
- binascii.unhexlify(hexstr)¶
Возвращает двоичные данные, представленные шестнадцатеричной строкой hexstr. Эта функция является обратной по отношению к
b2a_hex()
. hexstr должна содержать четное количество шестнадцатеричных цифр (которые могут быть в верхнем или нижнем регистре), иначе будет вызвано исключениеError
.Аналогичная функциональность (принимающая только текстовые строковые аргументы, но более либеральная по отношению к пробельным символам) также доступна с помощью метода класса
bytes.fromhex()
.
- exception binascii.Error¶
Исключение, возникающее при ошибках. Обычно это ошибки программирования.
- exception binascii.Incomplete¶
Исключение, возникающее при неполных данных. Обычно это не ошибки программирования, но с ними можно справиться, прочитав немного больше данных и повторив попытку.