binascii
— Преобразование между двоичным и ASCII-кодами¶
Модуль binascii
содержит ряд методов для преобразования двоичных данных в различные двоичные представления в кодировке ASCII. Обычно вы не используете эти функции напрямую, а используете модули-оболочки, такие как uu
или base64
. Модуль binascii
содержит низкоуровневые функции, написанные на C для большей скорости, которые используются модулями более высокого уровня.
Примечание
a2b_*
функции принимают строки в Юникоде, содержащие только символы ASCII. Другие функции принимают только bytes-like objects (например, bytes
, bytearray
и другие объекты, поддерживающие протокол buffer).
Изменено в версии 3.3: Строки в юникоде, содержащие только ASCII, теперь принимаются функциями a2b_*
.
Модуль binascii
определяет следующие функции:
- binascii.a2b_uu(string)¶
Преобразуйте одну строку uuencoded данных обратно в двоичную и верните двоичные данные. Строки обычно содержат 45 (двоичных) байт, за исключением последней строки. После данных в строке могут быть пробелы.
- binascii.b2a_uu(data, *, backtick=False)¶
Преобразуйте двоичные данные в строку из символов ASCII, возвращаемое значение - это преобразованная строка, включая символ новой строки. Длина данных должна быть не более 45. Если значение backtick равно true, то нули будут представлены символом
'`'
вместо пробелов.Изменено в версии 3.7: Добавлен параметр backtick.
- binascii.a2b_base64(string, /, *, strict_mode=False)¶
Преобразуйте блок данных base64 обратно в двоичный файл и верните двоичные данные. Одновременно может передаваться более одной строки.
Если значение strict_mode равно true, будут преобразованы только допустимые данные base64. Недопустимые данные base64 приведут к
binascii.Error
.Допустимый базовый уровень 64:
Соответствует RFC 3548.
Содержит только символы алфавита base64.
Не содержит лишних данных после заполнения (включая лишние отступы, новые строки и т.д.).
Не начинается с отступа.
Изменено в версии 3.11: Добавлен параметр strict_mode.
- binascii.b2a_base64(data, *, newline=True)¶
Преобразует двоичные данные в строку символов ASCII в кодировке base64. Возвращаемое значение - это преобразованная строка, включая символ новой строки, если значение newline равно true. Выходные данные этой функции соответствуют RFC 3548.
Изменено в версии 3.6: Добавлен параметр новая строка.
- binascii.a2b_qp(data, header=False)¶
Преобразуйте блок данных, выводимых в кавычках, обратно в двоичный формат и верните двоичные данные. Одновременно может передаваться более одной строки. Если необязательный аргумент header присутствует и имеет значение true, символы подчеркивания будут расшифрованы как пробелы.
- binascii.b2a_qp(data, quotetabs=False, istext=True, header=False)¶
Преобразуйте двоичные данные в строку(ы) символов ASCII в кодировке, пригодной для печати в кавычках. Возвращаемое значение - это преобразованная строка(ы). Если необязательный аргумент quotetabs присутствует и имеет значение true, все табуляции и пробелы будут закодированы. Если присутствует необязательный аргумент istext и он имеет значение true, новые строки не кодируются, но будут закодированы завершающие пробелы. Если присутствует необязательный аргумент header и он имеет значение true, пробелы будут закодированы как подчеркивания для RFC 1522. Если необязательный аргумент header присутствует и имеет значение false, символы новой строки также будут закодированы; в противном случае преобразование перевода строки может привести к повреждению потока двоичных данных.
- binascii.crc_hqx(data, value)¶
Вычислите 16-разрядное значение CRC для data, начиная с value в качестве исходного CRC, и верните результат. При этом используется многочлен CRC-CCITT x16 + x12 + * x*:sup:5 + 1,, часто представляемый как 0x1021. Этот CRC используется в формате binhex4.
- binascii.crc32(data[, value])¶
Вычислите CRC-32, беззнаковую 32-разрядную контрольную сумму данных, начиная с начального значения CRC, равного value. Начальное значение 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]])¶
Возвращает шестнадцатеричное представление двоичных данных. Каждый байт данных преобразуется в соответствующее двухзначное шестнадцатеричное представление. Таким образом, возвращаемый объект bytes в два раза длиннее, чем длина данных.
Аналогичная функциональность (но возвращающая текстовую строку) также удобно доступна с помощью метода
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¶
При неполных данных возникает исключение. Обычно это не ошибки программирования, но их можно устранить, прочитав немного больше данных и повторив попытку.