Какая функция нужна для перевода в двоичную систему в 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 = ""; .
Перевод в двоичный код
перевод числа в двоичный код и обратно