2013-02-28 42 views
1

我有一個像字符串:Python - 如何將字符串從二進制轉換爲整數列表?

s = "\0x01\0x02\0x01\0x11" 

而且我想要得到該字符串的平均數。我嘗試這樣做:

sum = 0 
for d in s: 
    sum += int(d) 

但它說: 「無效的字面INT()基數爲10: '\ X08'」。:-(

+1

[?你嘗試過什麼(http://whathaveyoutried.com) – Eric 2013-02-28 03:06:10

+0

@Eric見我的編輯:-) – 2013-02-28 03:10:43

+0

你真的希望最後的值是11嗎? – 2013-02-28 03:29:00

回答

3

我建議struct module

>>> import struct 
>>> s = '\x01\x02\x01\x11' 
>>> struct.unpack('=4B', s) 
(1, 2, 1, 17) 
0

你可以使用python int()函數,第一個參數是字符串,第二個是數字的底部。

您需要檢查基地,因爲您發佈的內容看起來像十六進制數字(0x0通常表示十六進制數字,另外02不是有效的二進制數字)。

對於二進制(基二):

num = int("0x11", 2); # num will be 3 

十六進制(基數爲16):

num = int("0x0A", 16); # num will be 10 

要轉換的字符串( 「\ 0×01 \ 0×02 \ 0×01 \ 0×11」):

numbers = [int(s, base) for s in "\\0x01\\0x02\\0x01\\0x11".split("\\") if len(s)] 

如果有base = 16運行,輸出:numbers = [1, 2, 1, 17]

然後,您可以使用求其平均值:

average = sum(numbers)/len(numbers) 
0

ord()意志,給定長度爲一的字符串時,給你在字符串中的字符的代碼點。您應該只能夠在代碼中使用,而不是int(),這將是這個樣子:

sum = 0 
for d in s: 
    sum += ord(d) 
相關問題