1

我有一个字符串,如:

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

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

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

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

4

4 回答 4

3

我推荐结构模块

>>> import struct
>>> s = '\x01\x02\x01\x11'
>>> struct.unpack('=4B', s)
(1, 2, 1, 17)
于 2013-02-28T03:07:59.093 回答
0

可以使用pythonint()函数,第一个参数是字符串,第二个是数字的底数。

您需要检查基数,因为您发布的内容看起来像十六进制数(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)
于 2013-02-28T03:16:37.233 回答
0

当给定一个长度为 1 的字符串时,ord()遗嘱会为您提供该字符串中字符的代码点。您应该能够使用它而不是int()在您的代码中,它看起来像这样:

sum = 0
for d in s:
    sum += ord(d)
于 2013-02-28T03:34:19.017 回答
0

你可以这样做:

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

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

# 15
于 2020-02-22T00:31:25.347 回答