我需要一种方法来获得python中字符串的二进制表示。例如:
st = "hello world"
toBinary(st)
有没有一种简洁的方法来实现这一点呢?
发布于 2013-09-16 02:24:54
像这样的东西?
>>> 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'
发布于 2018-10-11 21:51:10
我们只需要对它进行编码。
'string'.encode('ascii')
发布于 2013-09-16 02:23:50
您可以使用ord()
内置函数访问字符串中字符的代码值。如果您随后需要将其格式化为二进制,则string.format()
方法将完成此工作。
a = "test"
print(' '.join(format(ord(x), 'b') for x in a))
(感谢Ashwini Chaudhary发布了该代码片段。)
虽然上面的代码可以在Python3中运行,但是如果您假设使用UTF-8以外的任何编码,那么这个问题就会变得更加复杂。在Python 2中,字符串是字节序列,默认情况下采用ASCII编码。在Python3中,字符串被假定为Unicode,并且有一个单独的bytes
类型,它的行为更像Python2字符串。如果您希望采用UTF-8以外的任何编码,则需要指定编码。
然后,在Python 3中,您可以这样做:
a = "test"
a_bytes = bytes(a, "ascii")
print(' '.join(["{0:b}".format(x) for x in a_bytes]))
对于简单的字母数字字符串,UTF-8和ascii编码之间的差异不会很明显,但如果要处理的文本包含不在ascii字符集中的字符,则UTF-8和ascii编码之间的差异将变得重要。
https://stackoverflow.com/questions/18815820
复制相似问题