关于python:编写一个函数将十六进制转换为十进制

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,则不起作用。我不明白这是为什么。


您可以使用int使这变得容易得多。功能:

1
2
def hex_to_dex(strng_of_hex):
    return int(strng_of_hex, 16)

例子:

1
2
>>> int("0xff", 16)
255

如果您在int中有一个0xinfront,这并不重要,它将忽略字符串中的0x。因此,以下内容也将起作用:

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"。因此,十六进制函数返回值None。为了防止这种情况发生,您需要将用户输入的字符串一次传递给十六进制函数一个字符。

    假设:

    1
    values = raw_input().upper()

    使用你问题中定义的hex()函数。你可以:

    1
    print([hex(v) for v in values])

    或者如果您不想要列表:

    1
    print(' '.join([str(hex(v)) for v in values]))

    这将使用您定义的函数,但将其应用于用户输入的所有字符…而不是第一个。

    这个答案是在假设您对您定义的hex()函数的当前功能和返回类型感到满意的情况下工作的。