Python

4 способа преобразовать двоичную строку в обычную строку

Двоичная строка используется для хранения данных в виде байтов. Байт — это единица в компьютерном программировании, состоящая из 8 бит. Байт используется для хранения многих форматов данных, таких как аудиофайлы, видеофайлы и изображения.

Двоичная строка состоит только из 0 и 1. Это последовательность нулей и единиц, которые имеют определенное значение, связанное с ними.

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

В то время как двоичные данные предназначены исключительно для интерпретации компьютерами.

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

Связанный: прочитайте аналогичный пост о том, как конвертировать байты в Unicode.

Строки символов должны иметь указанный формат кодирования, чтобы иметь возможность обмениваться между различными форматами.

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

Что такое двоичная строка?

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

Есть несколько способов создать двоичную строку в Python.

Прежде чем мы перейдем к примерам, нам нужно кое-что прояснить. В Python всякий раз, когда мы пытаемся представить двоичную строку, всегда есть префикс, называемый 0b префикс, используемый для обозначения того, что это двоичное число.

В большинстве случаев, когда мы пытаемся преобразовать двоичную строку в строку символов или наоборот, мы пытаемся устранить этот префикс.

Связанный: прочтите эту статью, чтобы узнать больше о преобразовании целых чисел в двоичные.

Использование функции bin()

Функция bin() — это встроенная функция Python, используемая для получения двоичного представления целого числа.

num=74
print("The number is:",num)
x=bin(num)
print("The binary representation of ",num, "is:",x)

В этом коде мы присваиваем значение 74 переменной num. Нам нужно представить 74 в двоичном формате. В следующей строке мы печатаем число.

Далее мы используем функцию bin и передаем num переменная в качестве аргумента. Результат сохраняется в x.

Двоичное представление печатается в следующей строке.

Целое число в двоичную строку
Целое число в двоичную строку

Как обсуждалось выше, 0b префикс включается перед двоичной строкой. Есть способ удалить префикс.

num=74
print("The number is:",num)
x=bin(num)[2:]
print("The binary representation of ",num, "is:",x)
print(type(num))
print(type(x))

Этот код аналогичен приведенному выше коду. Но мы использовали оператор среза (:) в строке 3, чтобы удалить 0b префикс. Поскольку в Python индексация начинается с нуля, 0 и b имеют позиции 0 и 1 соответственно. Итак, мы пытаемся напечатать содержимое переменной x, начиная со второй позиции.

Последние две строки также выводят тип num и x соответственно.

Целое число в двоичное без 0b
Целое число в двоичное без 0b

Преобразование строки символов в двоичную строку

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

mes = "AskPython"
bstr=" ".join(format(ord(c), '08b') for c in mes)
print(bstr)
print(type(bstr))

Строка, которую мы пытаемся преобразовать в двоичную строку, называется «AskPython», которая присваивается переменной mes.

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

Давайте сломаем эту строку кода.

' ' – Двоичное представление должно быть напечатано с пробелом между ними, поэтому мы используем кавычки с пробелом.

.join(format(ord(c), '08b') for c in mess – Функция соединения используется для объединения различных двоичных строк, полученных функцией ord, которая используется для получения значения Unicode для каждого символа в строке. Значения, полученные функцией ord, преобразуются в двоичное представление с помощью спецификатора формата 08b, так что каждая часть двоичного представления имеет только восемь битов. Существует также итерация цикла for для преобразования каждого символа в строке в двоичный код.

Далее мы печатаем двоичную строку. В последней строке мы также печатаем тип новой двоичной строки.

Строка символов в двоичную строку
Строка символов в двоичную строку

Прочтите этот пост, чтобы узнать больше о ord().

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

Попробуем преобразовать двоичную строку в обычную строку, используя некоторые подходы.

Использование Bitarray для преобразования двоичной строки в обычную строку

Битовый массив — это библиотека проекта PyPI, используемая для создания массива логических значений (0 и 1). Поскольку это библиотека, ее необходимо установить перед использованием.

Вот как вы можете установить библиотеку

Using the pip command
pip install bitarray
In the conda terminal 
conda install bitarray
In notebooks(Jupyter or colab)
! pip install bitarray

После того, как он установлен, мы можем импортировать его и использовать.

from bitarray import bitarray
bins = "01000001 01110011 01101011 01010000 01111001 01110100 01101000 01101111 01101110"
bts = bitarray(bins)
ascs = bts.tobytes().decode('ascii')
print("The normal string is: ", ascs)
print(type(ascs))

Во-первых, мы импортируем метод bitarray из библиотеки bitarray.

Затем для хранения некоторых двоичных данных используется переменная с именем bins. Другая переменная, называемая bts, создается для генерации 8-битной последовательности логических значений из двоичных данных.

Переменная с именем ascs используется для сохранения преобразования двоичных данных в обычную строку с помощью tobytes и декодирования. Схема кодирования указана как ascii.

Следующие две строки выводят нормальную строку и тип этой нормальной строки.

Двоичная строка в обычную строку с использованием Bitarray
Двоичная строка в обычную строку с использованием Bitarray

Использование цикла for для преобразования двоичной строки в обычную строку

Основная концепция преобразования двоичной строки в обычную строку остается прежней. Но мы можем попробовать использовать цикл for для перебора двоичных данных и создания обычной строки.

bins = "0100100001100101011011000110110001101111"
str = ""
for i in range(0, len(bins), 8):
    binc = bins[i:i + 8]
    num = int(binc, 2)
    str += chr(num)
print("The normal representation of ",bins ,"is", str)
print(type(str))

Прежде всего, мы объявляем данные байта и назначаем их бинам. Пустая строка str создается для хранения обычной строки после преобразования.

Мы инициализируем цикл for для прохождения двоичных данных, начиная с 0, по длине бинов с инкрементом 8. Мы сделали это, потому что каждое двоичное данные состоит из 8 бит.

binc означает двоичный фрагмент, который является частью двоичных данных, каждый из которых имеет 8 бит.

Теперь у нас есть двоичные данные, разделенные на равные части, теперь нам нужно преобразовать эти части в десятичные значения с помощью команды int() метод вместе с основанием 2.

Десятичное значение преобразуется в соответствующее значение ASCII с помощью chr(). Это значение ASCII добавляется к пустой строке str.

Наконец, мы печатаем обычную строку, хранящуюся в str, а также тип переменной str.

Двоичная строка в обычную строку с использованием цикла for
Двоичная строка в обычную строку с использованием цикла for

Использование понимания списка

List Comprehension — это всего лишь короткая форма, позволяющая уменьшить код, разбросанный по нескольким строкам.

Читайте: Что такое понимание списка в Python?

Код приведен ниже.

bins="01001000011001010110110001101100011011110101011101101111011100100110110001100100"
binc = [bins[i:i + 8] for i in range(0, len(bins), 8)]
nums = [int(chunk, 2) for chunk in binc]
str1 = ''.join(chr(num) for num in nums)
print("The normal string is:", str1)

Как обычно, мы присваиваем бинарные данные переменным бинам. Затем мы пытаемся создать блоки бинарных данных одинаковой длины, называемые binc.

Теперь у нас есть двоичные данные, разделенные на равные части, теперь нам нужно преобразовать эти части в десятичные значения с помощью команды int() метод вместе с основанием 2.

Переменная с именем str1 используется для хранения обычной строки после преобразования.

Наконец, мы печатаем обычную строку.

Обратите внимание на предыдущий пример и этот. Оба по сути одинаковы. Но с пониманием списка мы можем сократить код и сделать его простым для чтения.

Использование понимания списка
Использование понимания списка

Использование побитовых операторов

Мы можем использовать побитовые операции, чтобы разделить огромные двоичные данные на одинаковые куски. Давайте посмотрим, как мы можем это сделать.

bins="0100100001100101011011000110110001101111001000000101011101101111011100100110110001100100"
num = int(bins, 2)
str1 = num.to_bytes((num.bit_length() + 7) // 8, 'big').decode('ascii')
print("The normal string is :", str1)
type(str1)

Как всегда, мы присвоили случайные двоичные данные переменной, называемой bins.

Затем мы создаем переменную с именем num для хранения десятичных значений, соответствующих двоичным данным, в целочисленном формате с основанием 2.

Создается переменная с именем str1 для хранения результата после преобразования. Чтобы объяснить это более ясно, общая длина переменной num добавляется к 7, а затем делится на 8, чтобы получить равные фрагменты двоичных данных. Эти десятичные данные преобразуются в байты, а затем декодируются. big используется для указания старшего бита, который должен быть передан первым.

Строка и тип вывода печатаются в последних двух строках.

Использование побитовых операций
Использование побитовых операций

Заключение

Подводя итог, мы узнали, что такое схема двоичного представления и как ее легко понять компьютерам, поскольку она представляет данные в виде нулей и единиц.

Мы также видели различия между символьной строкой и двоичной строкой. В то время как двоичная строка используется для выполнения низкоуровневых операций, символьная строка используется для выполнения высокоуровневых задач обработки, таких как НЛП.

Далее мы узнали, как создать двоичную строку из целого числа с помощью функции bin(). Мы также увидели, как двоичные данные представляются с префиксом 0b и как удалить этот префикс при создании двоичной строки.

Что касается обратного преобразования (двоичной строки в обычную строку), мы изучили четыре подхода.

В первом мы использовали стороннюю библиотеку под названием bitarray используется для работы с огромными двоичными данными. Эти двоичные данные преобразуются в байты, которые затем преобразуются в обычную строку ASCII.

В следующем подходе мы использовали цикл for для выполнения той же операции. Но мы разделили огромные двоичные данные на куски одинакового размера. Эти фрагменты преобразуются в целочисленные значения с кодировкой по основанию 2. Эти целочисленные значения используются для декодирования в обычную строку с форматом декодирования -ascii.

Следующий подход — понимание списка. который является модифицированной формой предыдущего примера.

Последний подход использует побитовый оператор (//) для разделения двоичных данных на куски одинакового размера.

Рекомендации

Посетите официальную документацию PyPI, чтобы узнать больше о битовом массиве.

Узнайте больше о методе tobytes() библиотеки Numpy.


Ссылка на источник

Похожие статьи

Кнопка «Наверх»