我有一個字符串,其長度是8的倍數,只包含0和1。我想將字符串轉換爲適合寫入文件的字節數組。例如,如果我有字符串「0010011010011101」,我想獲得字節數組[0x26,0x9d],寫入文件時,它將給出0x269d作爲二進制(原始)內容。將1和0的字符串轉換爲字節數組
我該如何在Python中做到這一點?
我有一個字符串,其長度是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