基本:
我正在尝试使用字典将十六进制转换为十进制,但是我不知道该如何转换。我尝试使用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)
答案 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)
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
中的值一样。