Python - 如何将字符串从二进制转换为整数列表?

时间:2013-02-28 03:04:13

标签: python

我有一个字符串:

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

我想获得该字符串的平均数。我试过这个:

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

但它说“基础10的int()的文字无效:'\ x08'”: - (

4 个答案:

答案 0 :(得分:3)

我推荐struct module

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

答案 1 :(得分:0)

你可以使用python int()函数,第一个参数是字符串,第二个是数字的基数。

您需要检查基数,因为您发布的内容看起来像十六进制数字(0x0通常表示十六进制数字,另外02表示不是有效的二进制数字。)

对于二进制(基数为二):

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)

答案 2 :(得分:0)

ord()给定一个长度为1的字符串时,它将为您提供该字符串中字符的代码点。您应该只能在代码中使用此代替int(),这看起来像这样:

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

答案 3 :(得分:0)

您可以这样做:

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

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

# 15