您必须将其转换为 int 并一次获取 8 位,或者将其切成 8 字节长的字符串,然后将它们中的每一个转换为 int。在 Python 3 中,正如 PM 2Ring 和 J.F Sebastian 的回答所示,int 的 to_bytes() 方法允许您非常有效地执行第一种方法。这在 Python 2 中不可用,因此对于坚持这一点的人来说,第二种方法可能更有效。这是一个例子:
>>> s = "0110100001101001"
>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'
为了打破这一点,range 语句从索引 0 开始,并为我们提供源字符串的索引,但一次推进 8 个索引。由于s 有 16 个字符长,它会给我们两个索引:
>>> list(range(0, 50, 8))
[0, 8, 16, 24, 32, 40, 48]
>>> list(range(0, len(s), 8))
[0, 8]
(我们在这里使用list() 来显示将从 Python 3 中的范围迭代器中检索到的值。)
然后,我们可以在此基础上通过截取 8 个字符长的片段来拆分字符串:
>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
然后我们可以将它们中的每一个转换为整数,以 2 为底:
>>> list(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
[104, 105]
最后,我们将整个内容包裹在bytes() 中以获得答案:
>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'