Преобразование бинарной строки в обычную в Python3

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для декодирования двоичной строки используйте функцию int(binary_chunk, 2) для преобразования 8-битных последовательностей в целые числа, а потом перевести их в символы с помощью функции chr(). Наконец, соедините получившиеся символы в строку при помощи генератора списка:

Python
Скопировать код
binary_string = '0100100001100101011011000110110001101111'
normal_string = ''.join(chr(int(binary_string[i:i+8], 2)) for i in range(0, len(binary_string), 8))
print(normal_string)  # Вывод: Hello
Кинга Идем в IT: пошаговый план для смены профессии

Кодирование и декодирование подробно

Как получить двоичное представление текста

Для понимания получения двоичной строки займемся изучением преобразования текстовой строки в двоичные данные. Такой процесс носит название кодирования:

Python
Скопировать код
text = 'Hello'
binary_encoded = text.encode('ascii')  
print(binary_encoded)  # Вывод: b'Hello'

Функция encode() требует явного указания параметра кодировки символов. Наиболее распространенные варианты – 'ascii' и 'utf-8', причем последняя поддерживает бОльшее количество символов.

Перевод двоичных данных обратно в текст

Декодирование обратно превращает двоичные данные в читаемый текст. При данной операции необходимо использовать ту же кодировку, что и при кодировании:

Python
Скопировать код
binary_text = b'0100100001100101011011000110110001101111'
normal_text = binary_text.decode('utf-8')
print(normal_text)  # Вывод: Hello

Важность префикса 'b'

Префикс 'b' в Python означает, что речь идет о бинарных данных. Он добавляется при кодировании и убирается при декодировании.

Как работать с нестандартными кодировками

Если вам нужно использовать не-ASCII символы или иные кодировки, в Python предусмотрен модуль codecs:

Python
Скопировать код
import codecs
# Для экзотических кодировок типа 'hex' или 'base64':
binary_string = '68656c6c6f'  # 'hello' в шестнадцатеричном коде
normal_string = codecs.decode(binary_string, 'hex').decode('utf-8')
print(normal_string)  # Вывод: hello

Визуализация

Преобразуем двоичный код в текст, чтобы увидеть его действия:

Markdown
Скопировать код
Двоичная строка (🔒): "01101100 01101111 01110110 01100101"
Текстовая строка (💎): "любовь"

Для конвертации применим функции int() и chr() в Python3:

Python
Скопировать код
# Волшебный ключ, который открыл двоичный замок
normal_string = ''.join(chr(int(b, 2)) for b in binary_string.split())  # И вуаля – перед нами текстовая строка.

Таков обычный способ, согласно которому любой двоичный код может быть преобразован в сообщение.

Внимание! Продвинутые случаи и неожиданности

Дополнение двоичных строк нулями

В двоичных строках Редко встречается дополнительный ноль для выравнивания до 8 бит. В таком случае его следует либо обрезать, либо мы должны это учесть при преобразовании:

Python
Скопировать код
binary_string_padded = '0011000100110010'  # Здесь нули, судя по всему, лишние...
binary_string = binary_string_padded.lstrip('0')  # Удаляем начальные нули
# Продолжаем конвертацию

Специальные символы, эмодзи и UTF-8

Работайте с кодировкой 'utf-8' для строк, включающих специальные символы или эмодзи . Это поможет избежать ошибок кодирования:

Python
Скопировать код
special_string = 'Привет, 🌍!' 
binary_encoded = special_string.encode('utf-8')  # Кодирование в байты
normal_string = binary_encoded.decode('utf-8')  # Декодирование назад в строку

Как справиться с исключениями, если данные ошибочны

Если в исходной двоичной строке возникнут ошибки, актуально использовать блоки try-except для отлова исключений:

Python
Скопировать код
try:
    # Процесс конвертации
except ValueError:  
    print("Введены некорректные двоичные данные.")
except TypeError:  
    print("Введено значение, не являющееся бинарным.")

Полезные материалы

  1. Built-in Functions – Документация Python 3.12.2 – Документация функции int() для детального понимания.
  2. Convert binary to ASCII and vice versa – Stack Overflow — Обсуждение вопроса конвертации между двоичными данными и ASCII на Stack Overflow.
  3. Bitwise Operators in Python – Real Python — Подробное изучение работы с битами в Python.
  4. BinaryData – Python Wiki — Всё о работе с двоичными данными в Python 3.
  5. Binary to String/Text in Python – Stack Overflow — Советы и хитрости по преобразованию двоичных данных в текст на Stack Overflow.
  6. Tutorial | DigitalOcean — Пошаговое руководство по преобразованию текста в двоичные данные и обратно.
  7. Python Examples | Programiz — Статья по преобразованию двоичных чисел в десятичные и наоборот.