使用字典将十六进制转换为十进制

时间:2018-10-11 13:16:09

标签: python dictionary

基本:

我正在尝试使用字典将十六进制转换为十进制,但是我不知道该如何转换。我尝试使用for循环遍历用户输入的十六进制值,并通过将其乘以16的幂(取决于十六进制的长度)来转换每个十六进制值。例如,如果用户输入F21,则程序应识别出长度为3,因此应首先将15(F)乘以16 ^ 2,然后将其添加到2 * 16 ^ 1,再将其添加到1 * 16 ^ 0。但是我遇到了很多错误

十六进制到十进制字典:

hex_to_decimal = {
    "0":"0",
    "1":"1",
    "2":"2",
    "3":"3",
    "4":"4",
    "5":"5",
    "6":"6",
    "7":"7",
    "8":"8",
    "9":"9",
    "A":"10",
    "B":"11",
    "C":"12",
    "D":"13",
    "E":"14",
    "F":"15"
}

注意:

我不是在尝试练习字典时尝试使用此解决方案

s = "F21"
i = int(s, 16)

3 个答案:

答案 0 :(得分:0)

由于您要转换为十进制(整数的默认基数),因此应将hex_to_demical的值设为整数而不是字符串,以便可以对每个转换后的十六进制数字执行数字运算:

hex_to_decimal = {
    "0": 0,
    "1": 1,
    "2": 2,
    "3": 3,
    "4": 4,
    "5": 5,
    "6": 6,
    "7": 7,
    "8": 8,
    "9": 9,
    "A": 10,
    "B": 11,
    "C": 12,
    "D": 13,
    "E": 14,
    "F": 15
}
def convert(s):
    i = 0
    for h in s:
        i = i *16 + hex_to_decimal[h]
    return i

具有以上代码,

convert('F21')

将返回:

3873

答案 1 :(得分:0)

使用enumeratesum的单线:

def conv(s):
    return sum(16**i*int(hex_to_decimal[x]) for i, x in enumerate(s[::-1]))

conv('FF')
# 255
conv('A1')
# 161
conv('F21')
# 3873

答案 2 :(得分:0)

使用i只需查看十六进制字符串的索引n和数字enumerate(),然后进行计算n_dec*16**i(例如,使用n_dec = 15 n = F)。具体来说,我们有n_dec = int(hex_to_decimal[n]),需要int(),因为您将dict的值存储为str。最后,sum一切就绪:

s_hex = "F21"
s_dec = str(sum(
    int(hex_to_decimal[n])*16**i for i, n in enumerate(reversed(s_hex))
))

reversed()是必需的,因为第一(十六进制)数字表示较大的值。 str()仅用于将最终的十进制结果保留为str,就像您dict中的值一样。