Как перевести строку в двоичный код python
Перейти к содержимому

Как перевести строку в двоичный код python

  • автор:

Какая функция нужна для перевода в двоичную систему в Python?

Встроенная в Python функция bin() преобразует целое (десятичное) число в двоичную (бинарную) строку с префиксом ‘0b’.

x = 10 print(bin(x)) # => 0b1010 

Так же, для перевода в бинарную систему, можно использовать встроенную функцию format() .

format(value, format_spec='', /) 

где value, целое число, a format_spec спецификации формата ‘Mini-Language’ При указании спецификации посредством ‘b’ или ‘#b’ функция вернет двоичную (бинарную) строку без/с префиксом ‘0b’.

a = 7 b2 = format(a, '#b') b3 = format(a, 'b') print(b2, 'и', b3) # => 0b111 и 111 

Кодирование текста в произвольный двоичный код и обратно. Пример: «А» «01100011»

Мне нужно преобразовать строку, например «А» , в строку двоичного кода, например «01100011» , потом обработать немного двоичный код, пропустив его по функции «Исключающее ИЛИ» с другим двоичным кодом, например «01100011» с «11000010» , тогда выйдет «10100001» , и обратно перевести получившийся код в читаемую строку, например в «Т» . При этом, я хочу использовать русскую, английскую и украинскую раскладку и цифры, со знаками припинания. Не подскажете, как это сделать на Python 3? Вопрос состоит в том как в Python преобразовать строку в двоичный код и обратно используя любой алгоритм кодировки?

Отслеживать
15.5k 3 3 золотых знака 18 18 серебряных знаков 30 30 бронзовых знаков
задан 7 сен 2017 в 17:12
191 1 1 золотой знак 2 2 серебряных знака 11 11 бронзовых знаков
Вы можете привести пример входной и выходной строк и алгоритм получения ‘T’ из «11000010» ?
7 сен 2017 в 17:19

Нет, алгоритм кодировки может быть любым, хоть МТК-2 🙂 Мне нужны функции, которые быстро переведут текст в двоичный код, любым способом!

7 сен 2017 в 17:25

Т.е. вопрос состоит в том как в Python преобразовать строку в двоичный код и обратно используя любой алгоритм кодировки? 😉

7 сен 2017 в 17:29
Да, именно это мне и требуется)
7 сен 2017 в 18:11
7 сен 2017 в 21:35

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Чтобы произвольный текст превратить в «01»-строки (биты):

def text_to_bits(text, encoding='utf-8', errors='surrogatepass'): bits = bin(int.from_bytes(text.encode(encoding, errors), 'big'))[2:] return bits.zfill(8 * ((len(bits) + 7) // 8)) 
def text_from_bits(bits, encoding='utf-8', errors='surrogatepass'): n = int(bits, 2) return n.to_bytes((n.bit_length() + 7) // 8, 'big').decode(encoding, errors) or '\0' 
>>> text_to_bits("мiр"))) '1101000010111100011010011101000110000000' >>> text_from_bits(_) мiр 

Чтобы выполнить XOR над двумя строками, нет необходимости биты в виде ascii-строк выражать:

from itertools import cycle def xor(message, key): return bytes(a^b for a, b in zip(message, cycle(key))) 

Достаточно текст в байты закодировать, используя .encode() метод:

>>> key = b'key' >>> xor('hello world'.encode(), key) b'\x03\x00\x15\x07\nY\x1c\n\x0b\x07\x01' >>> xor(_, key).decode() # и обратно 'hello world' 

Для больших строк, можно numpy использовать:

import numpy as np # pip install numpy def slow_xor(aa, bb): a = np.frombuffer(aa, dtype=np.byte) b = np.frombuffer(bb, dtype=np.byte) return np.bitwise_xor(a, b).tostring() 
>>> slow_xor(b'hello. ', 'миръ'.encode()) b'\xb8\xd9\xbc\xd4\xbe\xae\xff\xa4' 

Отслеживать
ответ дан 7 сен 2017 в 22:15
52.2k 11 11 золотых знаков 108 108 серебряных знаков 311 311 бронзовых знаков

Спасибо большое за ответ! Но как перевести «b’\xb8\xd9\xbc\xd4\xbe\xae\xff\xa4′» в «читаемую» строку?

8 сен 2017 в 16:03

@Nazar: не всякий набор байт является текстом (представьте данные картинки, пожатого архива). Если сделать XOR двух случайных фрагметов текста, закодированных в байты, используя какую-нибудь кодировку, то результат не обязан быть текстом в какой-либо ни было кодировке. Считайте XOR операцией шифрования, если ‘миръ’ это ключ, то чтобы расшифровать (достать исходный текст), можно снова XOR применить: xor(b’\xb8\xd9\xbc\xd4\xbe\xae\xff\xa4′, ‘миръ’.encode()).decode() -> ‘hello. ‘

8 сен 2017 в 17:20

Я тоже так думал. Пока не попробывал сделать это! Оказалось, что для xor нужно чтобы были одинаковые длины. А у b’\xb8\xd9\xbc\xd4\xbe\xae\xff\xa4′ и b’миръ’ длины разные! Поэтому обратно не получается получить изначальный текст.

9 сен 2017 в 11:18

@Nazar: длина одинаковая: 8 байт ( len(‘миръ’.encode()) == 8 ). b’миръ’ это вообще SyntaxError (код для Питон 3, так как вопрос имеет метку python-3.x). Верно, что размер для xor одинаковый нужен (поэтому cycle(key) и используется в одной из реализаций — не используйте для секретов)

9 сен 2017 в 14:26
Да, спасибо, я уже разобрался, проблема у меня была) Спасибо большое за помощь 🙂
9 сен 2017 в 17:44

s = 'отака собі тестова - String !' def encode(s): return list(map(lambda x: "".format(ord(x)).zfill(16), s)) def decode(lst): return ''.join(map(lambda x: chr(int(x,2)), lst)) 
In [10]: lst = encode(s) In [11]: lst Out[11]: ['0000010000111110', '0000010001000010', '0000010000110000', '0000010000111010', '0000010000110000', '0000000000100000', '0000010001000001', '0000010000111110', '0000010000110001', '0000010001010110', '0000000000100000', '0000010001000010', '0000010000110101', '0000010001000001', '0000010001000010', '0000010000111110', '0000010000110010', '0000010000110000', '0000000000100000', '0000000000101101', '0000000000100000', '0000000001010011', '0000000001110100', '0000000001110010', '0000000001101001', '0000000001101110', '0000000001100111', '0000000000100000', '0000000000100001'] In [12]: decode(lst) Out[12]: 'отака собі тестова - String !' 

Перевод из десятичной системы счисления в двоичную

Заметим, что в языке Python есть встроенная функция bin , которая переводит десятичное число в двоичную систему счисления.

>>> bin(5) '0b101' >>> bin(10) '0b1010'

Здесь же рассматривается алгоритм такого перевода и его реализация на Python.

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

  • 8 / 2 = 4, остаток 0
  • 4 / 2 = 2, остаток 0
  • 2 / 2 = 1, остаток 0
  • 1 / 2 = 0, остаток 1
  • 0 — конец деления
  • Сборка: 10002

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

n = int(input()) b = '' while n > 0: b = str(n % 2) + b n = n // 2 print(b)
8 1000

Пример решения задачи с использованием списка и без преобразования цифр двоичного числа в строковый тип:

n = int(input()) b = [] while n > 0: b.append(n % 2) n //= 2 b.reverse() for i in b: print(i, end='') print()

Метод reverse списка изменяет последовательность элементов на обратную.

X Скрыть Наверх

Решение задач на Python

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

Допустим у меня есть текст (hello 1), в котором могут быть использованы символы из моего алфавита (‘abcdefghijklmnopqrstuvwxyz 0123456789’). Как мне перевести его в двоичный код и обратно?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

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

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

Перевод текста в двоичный код
Добрый вечер! Облазил весь форум и не нашёл подобной статьи. Есть ли в matcad возможность перевода.

Перевод текста в двоичный код на основе алфавита
Нужно перевести текст из txt файла в двоичный код с помощью созданного алфавита #include.

307 / 188 / 97
Регистрация: 01.05.2014
Сообщений: 519

1 2 3 4 5 6
text = 'hello1' t2b = bin(int.from_bytes(text.encode(), 'big')) print(t2b) n = int(t2b, 2) b2t = n.to_bytes((n.bit_length() + 7) // 8, 'big').decode() print(b2t)

Регистрация: 21.11.2016
Сообщений: 11
спасибо, а как это работает?
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

перевод десятичного вещественного в машинный код(двоичный код)
пожалуйста , подскажите пожалуйста код C++ ,для перевода вещественного числа в машиное (двоичное.

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

Перевод в двоичный код
Всем доброе время суток! Под скажыте есть ли стандартные функцыи в яве для того чтобы целое.

Перевод в двоичный код
Здравствуйте, не ожидал, что столкнусь с подобной проблемой textBox2.Text = ""; .

Перевод в двоичный код
перевод числа в двоичный код и обратно

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *