2008-11-28 135 views
4

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

我该如何在Python中做到这一点?

+0

[0x26,0x9d]实际上并不是字节数组。它是2个整数的列表(内部是4字节的有符号值)。你是指实际的字节还是你的意思是整数?请澄清你的问题。 – 2008-11-28 20:27:03

+0

我应该如何将所需结果写入字节数组而不是int数组? – 2008-11-28 20:46:03

+0

字节序列可能是一个字符串('&\ x9d'),或者它可能是一个实际的数组(array.array('B',[0x26,0x9d]))。很多人说“数组”时,它们表示列表,元组或其他序列(如字符串)。或者他们可能意味着“阵列”,这是一个单独的图书馆。 – 2008-11-28 20:50:24

回答

3
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' 
5

你可以做这样的事情:

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

你的问题表明整数序列,而是说“的字节数组”,也说“当写入文件,将给0x269d作为二进制(原始)内容“。这是三件完全不同的事情。我认为你已经过分指定了。从你的各种评论看来,你只需要文件输出,而其他描述不是你想要的。

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

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

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

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