2012-12-09 138 views
0

我正在嘗試將代碼從php轉換爲python。我有一個二進制文字列表 -在python中處理二進制文字

['0b0', '0b0', '0b0', '0b0', '0b0', '0b0', '0b100', '0b1001100'] 

這與連接時的0000000000000000000000000000000000000000000000000000010001001100相同。

int("0000000000000000000000000000000000000000000000000000010001001100",2) 

1100

如何使這個從列表中。無法連接二進制文字。

+0

連接時不應該是'1001001100'嗎? – Eric

+1

這裏未定義的是每一塊代表八位,並可能缺少前導零。 –

+0

0b0 = 00000000,最後兩位00000100,01001100 –

回答

1
>>> l = ['0b0', '0b0', '0b0', '0b0', '0b0', '0b0', '0b100', '0b1001100'] 
>>> int("".join("%02x" % int(x,0) for x in l), 16) 
1100 

的Python理解0b0101作爲二進制文字,所以我用int('0b0101', 0)到每一塊轉換爲int。然後我用一種方便的格式(十六進制的兩位數字)格式化它們,連接它們,並將它們解釋爲十六進制整數。

+0

「int(...,0)」在哪裏記錄?從未見過它。 – Eric

+3

就在那裏的文檔:http://docs.python.org/2/library/functions.html#int「基地0意味着將字符串完全解釋爲一個整數字面值,以便實際基數是2,8, 10或16。「 –

+0

完美!多謝兄弟 ! –

0

只需剝除0b

binary = ''.join(x[2:] for x in yourlist) 
print binary 
print int(binary, 2) 
+0

輸出588.我需要連接並獲取ascii值 –

+0

@AdityaSingh你的問題不清楚。 – arshajii

+0

@AdityaSingh:您的預期輸出是錯誤的。你在某處添加了一個零。 – Eric

1

您需要zfill方法來墊零權數量的元素

li = ['0b0', '0b0', '0b0', '0b0', '0b0', '0b0', '0b100', '0b1001100'] 
zero_padded = [x[2:].zfill(8) for x in li] 
print ''.join(zero_padded) 

輸出

0000000000000000000000000000000000000000000000000000010001001100 
0

這是醜陋夠你:

int(''.join([i for sl in [s[2:].zfill(8) for s in l] for i in sl]),2) 

(它似乎工作。)

也許這樣更具可讀性:

l = ['0b0', '0b0', '0b0', '0b0', '0b0', '0b0', '0b100', '0b1001100'] 
n = 0 
for s in l: 
    n = n*256 + int(s,2) 
print n