我需要编写一个将十六进制转换为十进制的函数,我已经知道如何做到这一点,但我已经陷入了第一位.到目前为止,我正在接受用户输入并以十六进制形式返回,但这只有在我一次输入1个内容时才有效.代码是:
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())
Run Code Online (Sandbox Code Playgroud)
如果我输入,例如,C然后它返回12,但如果我输入8C然后它不起作用.我无法弄清楚为什么会这样.
您可以使用它int来使这更容易.功能:
def hex_to_dex(strng_of_hex):
return int(strng_of_hex, 16)
Run Code Online (Sandbox Code Playgroud)
例:
>>> int("0xff", 16)
255
Run Code Online (Sandbox Code Playgroud)
如果你有一个0xint 的infront 并不重要,它会0x在字符串中忽略.所以,以下内容也适用:
>>> int("a", 16)
10
Run Code Online (Sandbox Code Playgroud)
对于从头开始的原始十六进制代码,请尝试以下操作:
def hex(s):
_hexer = "0123456789ABCDEF"
return sum([_hexer.find(var) * 16 ** i for i, var in enumerate(reversed(s.upper()))])
Run Code Online (Sandbox Code Playgroud)
如果你想要一些警卫:
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()))])
Run Code Online (Sandbox Code Playgroud)
我在这里使用了很多功能,但为了快速参考,这是一个附录:
至于[...]它的列表理解,你可以在其上找到大量的资源.