将1和0的字符串转换为字节数组

时间:2008-11-28 20:17:22

标签: python

我有一个字符串,其长度是8的倍数,只包含0和1。我想将字符串转换为适合写入文件的字节数组。例如,如果我有字符串“0010011010011101”,我想得到字节数组[0x26,0x9d],当写入文件时,它将给出0x269d作为二进制(原始)内容。

我怎样才能在Python中执行此操作?

4 个答案:

答案 0 :(得分:5)

你可以这样做:

>>> s = "0010011010011101"
>>> [int(s[x:x+8], 2) for x in range(0, len(s), 8)]
[38, 157]

答案 1 :(得分:4)

py> data = "0010011010011101"
py> data = [data[8*i:8*(i+1)] for i in range(len(data)/8)]
py> data
['00100110', '10011101']
py> data = [int(i, 2) for i in data]
py> data
[38, 157]
py> data = ''.join(chr(i) for i in data)
py> data
'&\x9d'

答案 2 :(得分:4)

你的问题显示了一个整数序列,但是说“字节数组”并且还说“当写入文件时,将给出0x269d作为二进制(原始)内容”。这是三件非常不同的事情。我认为你已经过度指定了。从您的各种评论中看起来您只想要文件输出,而其他描述则不是您想要的。

如果你想要一系列整数,请看Greg Hewgill的答案。

如果你想要一个字节序列(如字符串中) - 可以写入文件 - 请看Martinv.Löwis的答案。

如果你想要一个字节数组,你必须这样做。

import array
intList= [int(s[x:x+8], 2) for x in range(0, len(s), 8)]
byteArray= array.array('B', intList)

答案 3 :(得分:0)

Python 3 和 number.to_bytes

在 Python 3 中,您可以使用 number.to_bytes 本机将数字转换为字节。字节数组可以直接写入文件。

>>> import math,sys
>>> s='0010011010011101'
>>> int(s,2).to_bytes(math.ceil(len(s)/8),sys.byteorder)
b'\x9d&'
>>> with open('/tmp/blah', 'wb') as f:
...     f.write(int(s,2).to_bytes(math.ceil(len(s)/8),sys.byteorder))
... 
2
>>> quit()

文件内容

[root@localhost prbs]# od -x /tmp/blah
0000000 269d
0000002