在python中将string转换为二进制

我需要一种方法来获取Python中的string的二进制表示。 例如

st = "hello world" toBinary(st) 

有没有一个这样做的一个整洁的方式模块?

像这样的东西?

 >>> 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)) '1101000 1100101 1101100 1101100 1101111 100000 1110111 1101111 1110010 1101100 1100100' 

作为一个更pythonic的方式,你可以先将string转换为字节数组,然后在map使用bin函数:

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

或者你可以join:

 >>> ' '.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返回二进制数据的hex表示,然后可以通过指定16作为其基数,然后将其转换为bin的二进制数来转换为int。

您可以使用ord()内置函数访问string中的字符的代码值。 如果你需要用二进制格式来设置,那么string.format()方法就可以完成这个工作。

 a = "test" print(' '.join(format(ord(x), 'b') for x in a)) 

(感谢Ashwini Chaudhary发布该代码段。)

虽然上面的代码在Python 3中起作用,但如果您使用UTF-8以外的任何编码,则此问题变得更加复杂。 在Python 2中,string是字节序列,默认情况下是ASCII编码。 在Python 3中,string被假定为Unicode,并且有一个单独的bytestypes,它更像是一个Python 2string。 如果你想使用UTF-8以外的任何编码,你需要指定编码。

在Python 3中,你可以这样做:

 a = "test" a_bytes = bytes(a, "ascii") print(' '.join(["{0:b}".format(x) for x in a_bytes])) 

对于简单的字母数字string,UTF-8和ascii编码之间的差异不会很明显,但是如果您正在处理包含不在ascii字符集中的字符的文本,这将变得非常重要。