binascii.md
1> **Источник:** https://python-all.ru/3.3/library/binascii.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 19.8. [`binascii`](https://python-all.ru/3.3/library/binascii.html#module-binascii) – преобразование между двоичным и ASCII-форматами89Модуль [`binascii`](https://python-all.ru/3.3/library/binascii.html#module-binascii) содержит ряд методов для преобразования между двоичными данными и различными ASCII-кодированными двоичными представлениями. Обычно эти функции не используются напрямую – вместо этого применяются модули-обёртки, такие как [`uu`](https://python-all.ru/3.3/library/uu.html#module-uu), [`base64`](https://python-all.ru/3.3/library/base64.html#module-base64) или [`binhex`](https://python-all.ru/3.3/library/binhex.html#module-binhex). Модуль [`binascii`](https://python-all.ru/3.3/library/binascii.html#module-binascii) содержит низкоуровневые функции на C для большей производительности, которые используются высокоуровневыми модулями.1011> **Примечание**12>13> Функции `a2b_*` принимают строки Unicode, содержащие только символы ASCII. Остальные функции принимают только [*bytes-like object*](https://python-all.ru/3.3/glossary.html#term-bytes-like-object)s (например, [`bytes`](https://python-all.ru/3.3/library/functions.html#bytes), [`bytearray`](https://python-all.ru/3.3/library/functions.html#bytearray) и другие объекты, поддерживающие буферный протокол).14>15> Изменено в версии 3.3: Строки Unicode, содержащие только ASCII, теперь принимаются функциями `a2b_*`.1617Модуль [`binascii`](https://python-all.ru/3.3/library/binascii.html#module-binascii) определяет следующие функции:1819#### `binascii.a2b_uu(string)`2021Преобразует одну строку данных в кодировке UUencode обратно в двоичный вид и возвращает двоичные данные. Строки обычно содержат 45 двоичных байт, за исключением последней. После данных строки могут следовать пробельные символы.2223#### `binascii.b2a_uu(data)`2425Преобразует двоичные данные в строку ASCII-символов; возвращаемое значение – это преобразованная строка, включающая символ новой строки. Длина *data* должна быть не более 45.2627#### `binascii.a2b_base64(string)`2829Преобразует блок данных в кодировке base64 обратно в двоичный вид и возвращает двоичные данные. Можно передать одновременно несколько строк.3031#### `binascii.b2a_base64(data)`3233Преобразует двоичные данные в строку ASCII-символов в кодировке base64. Возвращаемое значение – преобразованная строка, включающая символ новой строки. Длина *data* должна быть не более 57 для соответствия стандарту base64.3435#### `binascii.a2b_qp(string, header=False)`3637Преобразует блок данных в кодировке quoted-printable обратно в двоичный вид и возвращает двоичные данные. Можно передать одновременно несколько строк. Если необязательный аргумент *header* присутствует и равен true, символы подчёркивания будут декодированы как пробелы.3839Изменено в версии 3.2: В качестве входа принимаются только объекты bytestring или bytearray.4041#### `binascii.b2a_qp(data, quotetabs=False, istext=True, header=False)`4243Преобразует двоичные данные в строку (строки) символов ASCII в кодировке quoted-printable encoding. Возвращаемое значение – преобразованная строка (строки). Если необязательный аргумент *quotetabs* присутствует и равен true, все табуляции и пробелы будут закодированы. Если необязательный аргумент *istext* присутствует и равен true, символы новой строки не кодируются, но завершающие пробельные символы будут закодированы. Если необязательный аргумент *header* присутствует и равен true, пробелы будут закодированы как символы подчеркивания в соответствии с RFC1522. Если необязательный аргумент *header* присутствует и равен false, символы новой строки также будут закодированы; в противном случае преобразование перевода строки может повредить поток двоичных данных.4445#### `binascii.a2b_hqx(string)`4647Преобразует ASCII-данные в формате binhex4 в двоичный код без выполнения RLE-декомпрессии. Строка должна содержать полное количество двоичных байт, или (в случае последней части данных binhex4) оставшиеся биты должны быть нулевыми.4849#### `binascii.rledecode_hqx(data)`5051Выполняет RLE-декомпрессию данных в соответствии со стандартом binhex4. Алгоритм использует `0x90` после байта как индикатор повтора, за которым следует количество. Количество `0` указывает значение байта `0x90`. Функция возвращает декомпрессированные данные, если только входные данные не заканчиваются одиноким индикатором повтора – в этом случае возбуждается исключение [`Incomplete`](https://python-all.ru/3.3/library/binascii.html#binascii.Incomplete).5253Изменено в версии 3.2: В качестве входа принимаются только объекты bytestring или bytearray.5455#### `binascii.rlecode_hqx(data)`5657Выполняет RLE-сжатие данных *data* в стиле binhex4 и возвращает результат.5859#### `binascii.b2a_hqx(data)`6061Выполняет перевод двоичного кода в ASCII в формате hexbin4 и возвращает результирующую строку. Аргумент уже должен быть RLE-кодированным и иметь длину, кратную 3 (за исключением, возможно, последнего фрагмента).6263#### `binascii.crc_hqx(data, crc)`6465Вычисляет значение CRC binhex4 для *data*, начиная с начального *crc*, и возвращает результат.6667#### `binascii.crc32(data[, crc])`6869Вычисляет CRC-32 – 32-битную контрольную сумму данных, начиная с начального crc. Это согласуется с контрольной суммой ZIP-файлов. Поскольку алгоритм предназначен для использования в качестве контрольной суммы, он не подходит в качестве универсальной хеш-функции. Используется следующим образом:7071```python72print(binascii.crc32(b"hello world"))73# Или двумя частями:74crc = binascii.crc32(b"hello")75crc = binascii.crc32(b" world", crc) & 0xffffffff76print('crc32 = {:#010x}'.format(crc))77```7879> **Примечание**80>81> Чтобы получить одинаковое числовое значение во всех версиях Python и на всех платформах, используйте crc32(data) & 0xffffffff. Если контрольная сумма используется только в упакованном двоичном формате, это необязательно, так как возвращаемое значение уже является правильным 32-битным двоичным представлением независимо от знака.8283#### `binascii.b2a_hex(data)`8485#### `binascii.hexlify(data)`8687Возвращает шестнадцатеричное представление двоичных данных *data*. Каждый байт *data* преобразуется в соответствующее двузначное шестнадцатеричное представление. Поэтому возвращаемый объект bytes в два раза длиннее *data*.8889#### `binascii.a2b_hex(hexstr)`9091#### `binascii.unhexlify(hexstr)`9293Возвращает двоичные данные, представленные шестнадцатеричной строкой *hexstr*. Эта функция является обратной к [`b2a_hex()`](https://python-all.ru/3.3/library/binascii.html#binascii.b2a_hex). *hexstr* должна содержать чётное количество шестнадцатеричных цифр (могут быть как прописные, так и строчные), в противном случае возбуждается [`TypeError`](https://python-all.ru/3.3/library/exceptions.html#TypeError).9495Изменено в версии 3.2: В качестве входа принимаются только объекты bytestring или bytearray.9697#### `exception binascii.Error`9899Исключение, вызываемое при ошибках. Обычно это ошибки программирования.100101#### `exception binascii.Incomplete`102103Исключение, вызываемое при неполных данных. Обычно это не ошибки программирования, но их можно обработать, прочитав ещё немного данных и повторив попытку.104105> **См. также**106>107> **Модуль [`base64`](https://python-all.ru/3.3/library/base64.html#module-base64)**108>109> Поддержка кодировки base64, используемой в сообщениях электронной почты MIME.110>111> **Модуль [`binhex`](https://python-all.ru/3.3/library/binhex.html#module-binhex)**112>113> Поддержка формата binhex, используемого на Macintosh.114>115> **Модуль [`uu`](https://python-all.ru/3.3/library/uu.html#module-uu)**116>117> Поддержка UU-кодирования, используемого в Unix.118>119> **Модуль [`quopri`](https://python-all.ru/3.3/library/quopri.html#module-quopri)**120>121> Поддержка quoted-printable кодирования, используемого в MIME-сообщениях электронной почты.122