尝试编写将十六进制转换为十进制的简单代码时:
#Hex multiply by 16 depending on position: 0xAB = A*16 + B = 10*16
#0x375
#3*(16**2) + 7*(16**1) + 5
我需要反转这个数字,因为16
的指数将向右增加
def tohex(integer): #375
power = 0
l = [num for num in str(integer)] #['3','7','5']
l.reverse() #['5','7','3']
for i, n in enumerate(l): # OK
number = int(n) # OK
l[i] = n*(16**power) # ???
print(l[i])
power + 1
l.reverse()
return "".join(l)
print(tohex(375))
输出:
─$ python3 hextobase64.py
5
7
3
375
在我看来l[i] = n*(16**power)
什么也没做。为什么会这样
编辑: 固定版本:
def tohex(integer): #375
power = 0
f = []
l = [num for num in str(integer)] #['3','7','5']
l.reverse() #['5','7','3']
for n in l: # OK
number = int(n)
f.append(number*(16**power))
power += 1
return sum(f)
print(tohex(375))
└─$ python3 hextobase64.py
885
上次编辑:
生成将abcdef
转换为10 11 12 13 14 15
的函数:
def removeletter(list):
#function to convert all letters in decimal to hex for todecimal()
for i, letter in enumerate(list):
if letter in hextable.keys():
list[i] = hextable[letter]
return list
hextable = {}
for number, letter in enumerate(lowers[:6]):
hextable[letter] = number + 10
def todecimal(h):
power = 0
l = [num for num in str(h)] #['3', 'a', '2', 'f']
l = removeletter(l)
l.reverse() #['f', '2', 'a', '3']
for i, n in enumerate(l):
number = int(n)
l[i] = number*(16**power)
power += 1
l.reverse()
return sum(l)
print(todecimal('49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d'))
输出:
python3 hextobase64.py
11259432467145572969189485457381052543241507215288737798329079056359121649591228422793827173000297562297701340508013
power + 1
到power+=1
。。。非常简单的修复正如我从你的问题中了解到的,你正在将一个
hexadecimal
数转换为decimal
。你在l[i] = n*(16**power)
行中使用了错误的变量,你在乘n
而不是number
。正如大家提到的,你应该在每次迭代中使用power += 1
来增加功率。此外,您最终将返回列表中的数字,而列表中的数字需要添加才能转换为十进制。 对代码进行了一些更改:输出:
相关问题 更多 >
编程相关推荐