【发布时间】:2021-08-06 03:23:29
【问题描述】:
在尝试将十六进制转换为十进制的简单代码时:
#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? -
n*(16**power)大概应该是number*(16**power),而power + 1需要是power += 1。您当前正在执行字符串乘法,并且仅将其乘以 1,因为power始终为0。 -
哈哈哈多么简单的解决方法,我没发现。
-
>>> hex(375) >>>'0x177'你到底在做什么? -
感谢@ShivamRoy,应该就是这样