Python中的二进制到字符串/文本

Dan*_*Dan 6 python binary text python-2.7 python-3.x

我在网上搜索了很多次,但我找不到转换二进制字符串变量X的方法

X = "1000100100010110001101000001101010110011001010100"
Run Code Online (Sandbox Code Playgroud)

转换为UTF-8字符串值.

我发现有些人正在使用诸如此类的方法

b'message'.decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

但是,这种方法对我没用,因为'b'据说是不存在的,我不知道如何用变量替换'message'.不仅如此,我还无法理解这种方法的工作原理.还有更好的选择吗?

那我怎么能把二进制字符串转换成文本字符串呢?

编辑:我也不介意ASCII解码

澄清:这是我想要发生的事情.

def binaryToText(z):
    # Some code to convert binary to text
    return (something here);
X="0110100001101001"
print binaryToText(X)
Run Code Online (Sandbox Code Playgroud)

这将产生字符串......

hi
Run Code Online (Sandbox Code Playgroud)

谢谢,丹尼尔

mha*_*wke 10

看起来您正在尝试从每个字符的二进制字符串表示(位串)中解码 ASCII 字符。

您可以将每个包含八个字符(一个字节)的块转换为整数,然后使用以下命令将其转换为字符chr()

>>> X = "0110100001101001"
>>> print(chr(int(X[:8], 2)))
h
>>> print(chr(int(X[8:], 2)))
i
Run Code Online (Sandbox Code Playgroud)

假设字符串中编码的值是 ASCII,这将为您提供字符。你可以这样概括:

def decode_binary_string(s):
    return ''.join(chr(int(s[i*8:i*8+8],2)) for i in range(len(s)//8))

>>> decode_binary_string(X)
hi
Run Code Online (Sandbox Code Playgroud)

如果您想将其保留在原始编码中,则无需进一步解码。通常,您会将传入的字符串转换为 Python unicode字符串,并且可以这样做(Python 2):

def decode_binary_string(s, encoding='UTF-8'):
    byte_string = ''.join(chr(int(s[i*8:i*8+8],2)) for i in range(len(s)//8))
    return byte_string.decode(encoding)
Run Code Online (Sandbox Code Playgroud)

  • 我这个解决方案已经太晚了,但我很好奇。当我运行上面的最后一个代码片段时,我得到“str”对象没有属性“decode”。我提出这个问题是因为这个解决方案看起来非常适合我的需要,但编码(或更确切地说解码)部分似乎不起作用。 (2认同)

jfs*_*jfs 5

要将“01”字符串(二进制数字)给出的位转换为 Python 3 中的相应文本:

>>> bits = "0110100001101001"
>>> n = int(bits, 2)
>>> n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()
'hi'
Run Code Online (Sandbox Code Playgroud)

对于 Python 2/3 解决方案,请参阅将二进制转换为 ASCII,反之亦然