我有一个字符串,如:
s = "\0x01\0x02\0x01\0x11"
我想得到那个字符串的平均数。我试过这个:
sum = 0
for d in s:
sum += int(d)
但它说“int() 的无效文字,基数为 10:'\x08'”:-(
我有一个字符串,如:
s = "\0x01\0x02\0x01\0x11"
我想得到那个字符串的平均数。我试过这个:
sum = 0
for d in s:
sum += int(d)
但它说“int() 的无效文字,基数为 10:'\x08'”:-(
我推荐结构模块。
>>> import struct
>>> s = '\x01\x02\x01\x11'
>>> struct.unpack('=4B', s)
(1, 2, 1, 17)
可以使用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)
当给定一个长度为 1 的字符串时,ord()
遗嘱会为您提供该字符串中字符的代码点。您应该能够使用它而不是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