2008-11-28 124 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) 
相關問題