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

新手上路,请多包涵

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

 X = "1000100100010110001101000001101010110011001010100"

转换为 UTF-8 字符串值。

我发现有些人正在使用诸如

b'message'.decode('utf-8')

但是,这种方法对我不起作用,因为据说“b”不存在,而且我不确定如何用变量替换“消息”。不仅如此,我还无法理解这种方法是如何工作的。有更好的选择吗?

那么如何将二进制字符串转换为文本字符串呢?

编辑:我也不介意 ASCII 解码

澄清:这是我特别希望发生的事情。

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

这将产生字符串……

 hi

原文由 Dan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 742
2 个回答

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

您可以获取每块八个字符(一个字节),将其转换为整数,然后使用 chr() 将其转换为字符:

 >>> X = "0110100001101001"
>>> print(chr(int(X[:8], 2)))
h
>>> print(chr(int(X[8:], 2)))
i

假设字符串中编码的值是 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

如果您想将其保留在原始编码中,则无需进一步解码。通常您会将传入的字符串转换为 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)

原文由 mhawke 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

对于 Python 23 解决方案,请参阅 Convert binary to ASCII and vice versa

原文由 jfs 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题