簡體   English   中英

Python - 如何將字符串從二進制轉換為整數列表?

[英]Python - How to convert a string from binary to integer list?

我得到了一個像這樣的字符串:

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

我想獲得該字符串的平均數。 我試過這個:

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

但它說“以 10 為基數的 int() 的文字無效:'\\x08'”:-(

我推薦struct 模塊

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

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

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

對於二進制(基數為 2):

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

對於十六進制(基數 16):

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

轉換您的字符串 ("\\0x01\\0x02\\0x01\\0x11"):

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)

ord()將在給定長度為 1 的字符串時為您提供該字符串中字符的代碼點。 你應該能夠在你的代碼中使用 this 而不是int() ,它看起來像這樣:

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

你可以這樣做:

s = "\0x01\0x02\0x01\0x11"
list = s.split('\0x')
list.remove('')

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

# 15

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM