Writing a function to convert hex to decimal
本问题已经有最佳答案,请猛点这里访问。
我需要写一个将十六进制转换为十进制的函数,我已经有了一个怎么做的想法,但是我还是停留在第一位。到目前为止,我接受用户输入并以十六进制返回它,但这只在我每次输入1个东西时有效。代码是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | def hex(x): if x =="0": return 0 elif x =="1": return 1 elif x =="2": return 2 elif x =="3": return 3 elif x =="4": return 4 elif x =="5": return 5 elif x =="6": return 6 elif x =="7": return 7 elif x =="8": return 8 elif x =="9": return 9 elif x =="A": return 10 elif x =="B": return 11 elif x =="C": return 12 elif x =="D": return 13 elif x =="E": return 14 elif x =="F": return 15 print hex(raw_input().upper()) |
例如,如果输入c,则返回12,如果输入8c,则不起作用。我不明白这是为什么。
您可以使用
1 2 | def hex_to_dex(strng_of_hex): return int(strng_of_hex, 16) |
例子:
1 2 | >>> int("0xff", 16) 255 |
如果您在int中有一个
1 2 | >>> int("a", 16) 10 |
对于从头开始的原始十六进制代码,请尝试以下操作:
1 2 3 | def hex(s): _hexer ="0123456789ABCDEF" return sum([_hexer.find(var) * 16 ** i for i, var in enumerate(reversed(s.upper()))]) |
如果你想让一些警卫进来:
1 2 3 4 5 6 7 8 | def hex(s): _hexer ="0123456789ABCDEF" if not all([var in _hexer for var in s.upper()]): print"Invalid string" return None return sum([_hexer.find(var) * 16 ** i for i, var in enumerate(reversed(s.upper()))]) |
我在这里使用了很多函数,但为了快速参考,这里有一个附录:
至于
目前,您正在将用户输入的整个字符串传递给十六进制函数。因此,它适用于"c",而不适用于"8c"。你没有在你的if语句中检查"8c"。因此,十六进制函数返回值
假设:
1 | values = raw_input().upper() |
使用你问题中定义的
1 | print([hex(v) for v in values]) |
或者如果您不想要列表:
1 | print(' '.join([str(hex(v)) for v in values])) |
这将使用您定义的函数,但将其应用于用户输入的所有字符…而不是第一个。
这个答案是在假设您对您定义的