binascii.md
1> **Источник:** https://python-all.ru/3.4/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.4/library/binascii.html#module-binascii) – преобразование между двоичным и ASCII-форматами89Модуль [`binascii`](https://python-all.ru/3.4/library/binascii.html#module-binascii) содержит ряд методов для преобразования между двоичными данными и различными ASCII-кодированными двоичными представлениями. Обычно эти функции не используются напрямую – вместо этого применяются модули-обёртки, такие как [`uu`](https://python-all.ru/3.4/library/uu.html#module-uu), [`base64`](https://python-all.ru/3.4/library/base64.html#module-base64) или [`binhex`](https://python-all.ru/3.4/library/binhex.html#module-binhex). Модуль [`binascii`](https://python-all.ru/3.4/library/binascii.html#module-binascii) содержит низкоуровневые функции на C для большей производительности, которые используются высокоуровневыми модулями.1011> **Примечание**12>13> Функции `a2b_*` принимают строки Unicode, содержащие только символы ASCII. Остальные функции принимают только [*bytes-like object*](https://python-all.ru/3.4/glossary.html#term-bytes-like-object)s (например, [`bytes`](https://python-all.ru/3.4/library/functions.html#bytes), [`bytearray`](https://python-all.ru/3.4/library/functions.html#bytearray) и другие объекты, поддерживающие буферный протокол).14>15> Изменено в версии 3.3: Строки Unicode, содержащие только ASCII, теперь принимаются функциями `a2b_*`.1617Модуль [`binascii`](https://python-all.ru/3.4/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. Возвращаемое значение – преобразованная строка, включая символ новой строки. Символ новой строки добавляется, потому что исходным вариантом использования этой функции была подача на вход серии строк по 57 байт для получения выходных строк, соответствующих стандарту MIME-base64. В остальном вывод соответствует [**RFC 3548**](https://python-all.ru/3.4/library/binascii.html).3435#### `binascii.a2b_qp(data, header=False)`3637Преобразует блок данных в кодировке quoted-printable обратно в двоичный вид и возвращает двоичные данные. Можно передать одновременно несколько строк. Если необязательный аргумент *header* присутствует и равен true, символы подчёркивания будут декодированы как пробелы.3839#### `binascii.b2a_qp(data, quotetabs=False, istext=True, header=False)`4041Преобразует двоичные данные в строку (строки) символов ASCII в кодировке quoted-printable encoding. Возвращаемое значение – преобразованная строка (строки). Если необязательный аргумент *quotetabs* присутствует и равен true, все табуляции и пробелы будут закодированы. Если необязательный аргумент *istext* присутствует и равен true, символы новой строки не кодируются, но завершающие пробельные символы будут закодированы. Если необязательный аргумент *header* присутствует и равен true, пробелы будут закодированы как символы подчеркивания в соответствии с RFC1522. Если необязательный аргумент *header* присутствует и равен false, символы новой строки также будут закодированы; в противном случае преобразование перевода строки может повредить поток двоичных данных.4243#### `binascii.a2b_hqx(string)`4445Преобразует ASCII-данные в формате binhex4 в двоичный код без выполнения RLE-декомпрессии. Строка должна содержать полное количество двоичных байт, или (в случае последней части данных binhex4) оставшиеся биты должны быть нулевыми.4647#### `binascii.rledecode_hqx(data)`4849Выполняет RLE-декомпрессию данных в соответствии со стандартом binhex4. Алгоритм использует `0x90` после байта как индикатор повтора, за которым следует количество. Количество `0` указывает значение байта `0x90`. Функция возвращает декомпрессированные данные, если только входные данные не заканчиваются одиноким индикатором повтора – в этом случае возбуждается исключение [`Incomplete`](https://python-all.ru/3.4/library/binascii.html#binascii.Incomplete).5051Изменено в версии 3.2: В качестве входа принимаются только объекты bytestring или bytearray.5253#### `binascii.rlecode_hqx(data)`5455Выполняет RLE-сжатие данных *data* в стиле binhex4 и возвращает результат.5657#### `binascii.b2a_hqx(data)`5859Выполняет перевод двоичного кода в ASCII в формате hexbin4 и возвращает результирующую строку. Аргумент уже должен быть RLE-кодированным и иметь длину, кратную 3 (за исключением, возможно, последнего фрагмента).6061#### `binascii.crc_hqx(data, crc)`6263Вычисляет значение CRC binhex4 для *data*, начиная с начального *crc*, и возвращает результат.6465#### `binascii.crc32(data[, crc])`6667Вычисляет CRC-32 – 32-битную контрольную сумму данных, начиная с начального crc. Это согласуется с контрольной суммой ZIP-файлов. Поскольку алгоритм предназначен для использования в качестве контрольной суммы, он не подходит в качестве универсальной хеш-функции. Используется следующим образом:6869```python70print(binascii.crc32(b"hello world"))71# Или двумя частями:72crc = binascii.crc32(b"hello")73crc = binascii.crc32(b" world", crc) & 0xffffffff74print('crc32 = {:#010x}'.format(crc))75```7677> **Примечание**78>79> Чтобы получить одинаковое числовое значение во всех версиях Python и на всех платформах, используйте crc32(data) & 0xffffffff. Если контрольная сумма используется только в упакованном двоичном формате, это необязательно, так как возвращаемое значение уже является правильным 32-битным двоичным представлением независимо от знака.8081#### `binascii.b2a_hex(data)`8283#### `binascii.hexlify(data)`8485Возвращает шестнадцатеричное представление двоичных данных *data*. Каждый байт *data* преобразуется в соответствующее двузначное шестнадцатеричное представление. Поэтому возвращаемый объект bytes в два раза длиннее *data*.8687#### `binascii.a2b_hex(hexstr)`8889#### `binascii.unhexlify(hexstr)`9091Возвращает двоичные данные, представленные шестнадцатеричной строкой *hexstr*. Эта функция является обратной к [`b2a_hex()`](https://python-all.ru/3.4/library/binascii.html#binascii.b2a_hex). *hexstr* должна содержать чётное количество шестнадцатеричных цифр (могут быть как прописные, так и строчные), в противном случае возбуждается [`TypeError`](https://python-all.ru/3.4/library/exceptions.html#TypeError).9293#### `exception binascii.Error`9495Исключение, вызываемое при ошибках. Обычно это ошибки программирования.9697#### `exception binascii.Incomplete`9899Исключение, вызываемое при неполных данных. Обычно это не ошибки программирования, но их можно обработать, прочитав ещё немного данных и повторив попытку.100101> **См. также**102>103> **Модуль [`base64`](https://python-all.ru/3.4/library/base64.html#module-base64)**104>105> Поддержка кодирования в стиле base64, соответствующего RFC, для оснований 16, 32, 64 и 85.106>107> **Модуль [`binhex`](https://python-all.ru/3.4/library/binhex.html#module-binhex)**108>109> Поддержка формата binhex, используемого на Macintosh.110>111> **Модуль [`uu`](https://python-all.ru/3.4/library/uu.html#module-uu)**112>113> Поддержка UU-кодирования, используемого в Unix.114>115> **Модуль [`quopri`](https://python-all.ru/3.4/library/quopri.html#module-quopri)**116>117> Поддержка quoted-printable кодирования, используемого в MIME-сообщениях электронной почты.118