我有一个长度为8的倍数的字符串,其中只包含0和1。我想将该字符串转换为适合写入文件的字节数组。例如,如果我有字符串“0010011010011101”,我想得到字节数组[0x26,0x9d],当写入文件时,它将给出0x269d作为二进制(原始)内容。
在Python中,我该怎么做?
在Python中,我该怎么做?
>>> s = "0010011010011101"
>>> [int(s[x:x+8], 2) for x in range(0, len(s), 8)]
[38, 157]
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'
import array
intList= [int(s[x:x+8], 2) for x in range(0, len(s), 8)]
byteArray= array.array('B', intList)
使用 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