在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,并且有一个单独的bytes
types,它更像是一个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字符集中的字符的文本,这将变得非常重要。