如何将“0”和“1”流翻译成字符?

How to translate a stream of '0' and '1' to characters?

我正在尝试将 01 的流翻译成字符, 不使用其他库,

例如'Hello World':

0100100001000101010011000100110001001111001000000101011101001111010100100100110001000100

我发现了这样的东西:

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"
>>> 

该函数一次取 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 table 使用 8。)

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'