Как перевести поток «0» и «1» в символы? - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь перевести поток 0, 1 в символы без использования других библиотек,

, например, "Hello World":

01001000010001010100110001001100010011110010000001010111010011110101000011110101001001001100010000

Я нашел что-то вроде этого:

def BinaryToString(binary):
    bingen = (binary[i:i+7] for i in range(0, len(binary), 7))
    return ''.join(chr(eval('0b'+n)) for n in bingen)

но когда я пытаюсь перевести, это ответ:

>>> BinaryToString("0100100001000101010011000100110001001111001000000101011101001111010100100100110001000100")
"$\x11)Db<@W'TID\x04"
>>> 

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

int принимает второй аргумент для определения базы, поэтому вы можете просто использовать что-то вроде int("00001110", 2), чтобы получить 14.

>>> binary = "0100100001000101010011000100110001001111001000000101011101001111010100100100110001000100"
>>> ''.join([chr(int(binary[i:i+8], 2)) for i in range(0, len(binary), 8)])
'HELLO WORLD'
0 голосов
/ 12 декабря 2018

Эта функция принимает 7 двоичных цифр за раз и преобразует их в символ.Измените его, чтобы преобразовать 8 цифр за раз.

def BinaryToString(binary):
    bingen = (binary[i:i+8] for i in range(0, len(binary), 8))
    return ''.join(chr(eval('0b'+n)) for n in bingen)

Все зависит от того, как ваш исходный текст кодируется для начала, но работает с примером, который вы предоставили.(Первоначально ASCII был определен с использованием 7 битов. В расширенной таблице ASCII используется 8.)

...