如何将字符串转换为二进制?

新手上路,请多包涵

我需要一种在 python 中获取字符串的二进制表示的方法。例如

st = "hello world"
toBinary(st)

是否有一些巧妙的方式来做到这一点?

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

阅读 544
2 个回答

像这样的东西?

 >>> st = "hello world"
>>> ' '.join(format(ord(x), 'b') for x in st)
'1101000 1100101 1101100 1101100 1101111 100000 1110111 1101111 1110010 1101100 1100100'

#using `bytearray`
>>> ' '.join(format(x, 'b') for x in bytearray(st, 'utf-8'))
'1101000 1100101 1101100 1101100 1101111 100000 1110111 1101111 1110010 1101100 1100100'

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

如果用二进制表示 bytes 类型,则可以只使用 encode 字符串对象的方法,该方法使用传递的编码类型将字符串编码为字节对象。您只需要确保将正确的编码传递给 encode 函数。

 In [9]: "hello world".encode('ascii')
Out[9]: b'hello world'

In [10]: byte_obj = "hello world".encode('ascii')

In [11]: byte_obj
Out[11]: b'hello world'

In [12]: byte_obj[0]
Out[12]: 104

否则,如果您希望它们以零和一的形式出现——二进制表示——作为一种更 pythonic 的方式,您可以先将字符串转换为字节数组,然后使用 bin 中的函数 map :

 >>> st = "hello world"
>>> map(bin,bytearray(st))
['0b1101000', '0b1100101', '0b1101100', '0b1101100', '0b1101111', '0b100000', '0b1110111', '0b1101111', '0b1110010', '0b1101100', '0b1100100']


或者你可以加入它:

 >>> ' '.join(map(bin,bytearray(st)))
'0b1101000 0b1100101 0b1101100 0b1101100 0b1101111 0b100000 0b1110111 0b1101111 0b1110010 0b1101100 0b1100100'

请注意,在 python3 中,您需要为 bytearray 函数指定编码:

 >>> ' '.join(map(bin,bytearray(st,'utf8')))
'0b1101000 0b1100101 0b1101100 0b1101100 0b1101111 0b100000 0b1110111 0b1101111 0b1110010 0b1101100 0b1100100'

您还可以在 python 2 中使用 binascii 模块:

 >>> import binascii
>>> bin(int(binascii.hexlify(st),16))
'0b110100001100101011011000110110001101111001000000111011101101111011100100110110001100100'

hexlify 返回二进制数据的十六进制表示,然后您可以通过指定 16 作为其基数转换为 int,然后使用 bin 将其转换为二进制。

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

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