Преобразование бинарной строки в обычную в Python3
Быстрый ответ
Для декодирования двоичной строки используйте функцию int(binary_chunk, 2)
для преобразования 8-битных последовательностей в целые числа, а потом перевести их в символы с помощью функции chr()
. Наконец, соедините получившиеся символы в строку при помощи генератора списка:
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
Кодирование и декодирование подробно
Как получить двоичное представление текста
Для понимания получения двоичной строки займемся изучением преобразования текстовой строки в двоичные данные. Такой процесс носит название кодирования:
text = 'Hello'
binary_encoded = text.encode('ascii')
print(binary_encoded) # Вывод: b'Hello'
Функция encode()
требует явного указания параметра кодировки символов. Наиболее распространенные варианты – 'ascii'
и 'utf-8'
, причем последняя поддерживает бОльшее количество символов.
Перевод двоичных данных обратно в текст
Декодирование обратно превращает двоичные данные в читаемый текст. При данной операции необходимо использовать ту же кодировку, что и при кодировании:
binary_text = b'0100100001100101011011000110110001101111'
normal_text = binary_text.decode('utf-8')
print(normal_text) # Вывод: Hello
Важность префикса 'b'
Префикс 'b'
в Python означает, что речь идет о бинарных данных. Он добавляется при кодировании и убирается при декодировании.
Как работать с нестандартными кодировками
Если вам нужно использовать не-ASCII символы или иные кодировки, в Python предусмотрен модуль codecs:
import codecs
# Для экзотических кодировок типа 'hex' или 'base64':
binary_string = '68656c6c6f' # 'hello' в шестнадцатеричном коде
normal_string = codecs.decode(binary_string, 'hex').decode('utf-8')
print(normal_string) # Вывод: hello
Визуализация
Преобразуем двоичный код в текст, чтобы увидеть его действия:
Двоичная строка (🔒): "01101100 01101111 01110110 01100101"
Текстовая строка (💎): "любовь"
Для конвертации применим функции int()
и chr()
в Python3:
# Волшебный ключ, который открыл двоичный замок
normal_string = ''.join(chr(int(b, 2)) for b in binary_string.split()) # И вуаля – перед нами текстовая строка.
Таков обычный способ, согласно которому любой двоичный код может быть преобразован в сообщение.
Внимание! Продвинутые случаи и неожиданности
Дополнение двоичных строк нулями
В двоичных строках Редко встречается дополнительный ноль для выравнивания до 8 бит. В таком случае его следует либо обрезать, либо мы должны это учесть при преобразовании:
binary_string_padded = '0011000100110010' # Здесь нули, судя по всему, лишние...
binary_string = binary_string_padded.lstrip('0') # Удаляем начальные нули
# Продолжаем конвертацию
Специальные символы, эмодзи и UTF-8
Работайте с кодировкой 'utf-8'
для строк, включающих специальные символы или эмодзи . Это поможет избежать ошибок кодирования:
special_string = 'Привет, 🌍!'
binary_encoded = special_string.encode('utf-8') # Кодирование в байты
normal_string = binary_encoded.decode('utf-8') # Декодирование назад в строку
Как справиться с исключениями, если данные ошибочны
Если в исходной двоичной строке возникнут ошибки, актуально использовать блоки try-except для отлова исключений:
try:
# Процесс конвертации
except ValueError:
print("Введены некорректные двоичные данные.")
except TypeError:
print("Введено значение, не являющееся бинарным.")
Полезные материалы
- Built-in Functions – Документация Python 3.12.2 – Документация функции
int()
для детального понимания. - Convert binary to ASCII and vice versa – Stack Overflow — Обсуждение вопроса конвертации между двоичными данными и ASCII на Stack Overflow.
- Bitwise Operators in Python – Real Python — Подробное изучение работы с битами в Python.
- BinaryData – Python Wiki — Всё о работе с двоичными данными в Python 3.
- Binary to String/Text in Python – Stack Overflow — Советы и хитрости по преобразованию двоичных данных в текст на Stack Overflow.
- Tutorial | DigitalOcean — Пошаговое руководство по преобразованию текста в двоичные данные и обратно.
- Python Examples | Programiz — Статья по преобразованию двоичных чисел в десятичные и наоборот.