将1和0的字符串转换为字节数组
问题描述:
我有一个字符串,其长度是8的倍数,只包含0和1。我想将字符串转换为适合写入文件的字节数组。例如,如果我有字符串“0010011010011101”,我想获得字节数组[0x26,0x9d],写入文件时,它将给出0x269d作为二进制(原始)内容。将1和0的字符串转换为字节数组
我该如何在Python中做到这一点?
答
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'
答
你可以做这样的事情:
>>> s = "0010011010011101"
>>> [int(s[x:x+8], 2) for x in range(0, len(s), 8)]
[38, 157]
答
你的问题表明整数序列,而是说“的字节数组”,也说“当写入文件,将给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)
[0x26,0x9d]实际上并不是字节数组。它是2个整数的列表(内部是4字节的有符号值)。你是指实际的字节还是你的意思是整数?请澄清你的问题。 – 2008-11-28 20:27:03
我应该如何将所需结果写入字节数组而不是int数组? – 2008-11-28 20:46:03
字节序列可能是一个字符串('&\ x9d'),或者它可能是一个实际的数组(array.array('B',[0x26,0x9d]))。很多人说“数组”时,它们表示列表,元组或其他序列(如字符串)。或者他们可能意味着“阵列”,这是一个单独的图书馆。 – 2008-11-28 20:50:24