while trying to make simple code to convert hex to decimal:
#Hex multiply by 16 depending on position: 0xAB = A*16 + B = 10*16
#0x375
#3*(16**2) + 7*(16**1) + 5
i needed to reverse the number because the exponent of 16
would increase to the right
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))
output:
─$ python3 hextobase64.py
5
7
3
375
it looks to me l[i] = n*(16**power)
isn't doing anything at all. why is this?
edit: fixed version:
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
last edit: made function to translate abcdef
to 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'))
output:
python3 hextobase64.py
11259432467145572969189485457381052543241507215288737798329079056359121649591228422793827173000297562297701340508013
power + 1
to power+=1
... very simple fix
As I understand from your question you're converting a hexadecimal
number to decimal
.You are using the wrong variable in the line l[i] = n*(16**power)
, you are multiplying n
instead of number
.And as everyone mentioned you should use power += 1
to increment power in every iteration. Also, you are finally returning the digits in the list, whereas the digits in the list need to added to be converted to decimal. Made a few changes to the code:
def tohex(integer):
power = 0
l = [num for num in str(integer)]
l.reverse()
for i, n in enumerate(l):
number = int(n)
l[i] = number*(16**power)
power += 1
l.reverse()
return sum(l)
print(tohex(375))
Output:
885
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.