Как мне превратить этот список в строку?

#python #binary #decimal #ascii

Вопрос:

Я пытаюсь преобразовать двоичный код в десятичный в ASCII. Используя этот код, я могу взять двоичный ввод и разделить его на куски по 7 бит.

 def binary_to_ascii7bits(bstring):
    n = 7
    byte = [bstring[i:i n] for i in range(0, len(bstring), n)]
    print(byte)
 

Мне нужно уметь превращать каждую 7-разрядную подстроку в десятичное число, чтобы использовать функцию chr. Если я попытаюсь превратить этот список в строку, он напечатает, например, «[‘1111000’]», но у меня не может быть скобок и апострофов в строке. Что я могу сделать, чтобы исправить это?

Комментарии:

1. Можете ли вы привести пример ввода?

2. print('n'.join(byte)) ?

3. Вы знаете, что символы ASCII ниже 32, по существу, недоступны для печати (некоторые из них являются элементами управления печатью, такими как вкладка и новая строка), поэтому ваш вывод может выглядеть странно в зависимости от предоставленной двоичной строки.

Ответ №1:

Прежде всего, для chr функции это должно быть целое число, а не десятичное.

Добавьте понимание этого списка перед функцией печати —

 byte = [chr(64   int(i)) for i in byte]
 

Это даст строку для байтов. Я думаю, это то, чего ты хочешь.

Ответ №2:

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

Вы должны int(..., 2) преобразовать строковое представление двоичного числа в целое число. Затем подайте chr заявку, чтобы получить персонажа. Эта процедура выполняется с использованием понимания (списка), так что результатом является список символов. Затем используйте join для создания одной строки.

 text = '1111000' * 10

def binary_to_ascii7bits(bstring):
    n = 7
    byte = [bstring[i:i n] for i in range(0, len(bstring), n)]
    return ''.join(chr(int(x, 2)) for x in byte)

print(binary_to_ascii7bits(text)) # xxxxxxxxxx