我有一个字符串:
s = "\0x01\0x02\0x01\0x11"
我想获得该字符串的平均数。我试过这个:
sum = 0
for d in s:
sum += int(d)
但它说“基础10的int()的文字无效:'\ x08'”: - (
答案 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