我想将一个十进制数转换为任意进制,然后再把它转回十进制。我在另一个问题中找到了下面的代码:
def int2base(x,b,alphabet='0123456789abcdefghijklmnopqrstuvwxyz'):
'convert an integer to its string representation in a given base'
if b<2 or b>len(alphabet):
if b==64: # assume base64 rather than raise error
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
else:
raise AssertionError("int2base base out of range")
if isinstance(x,complex): # return a tuple
return ( int2base(x.real,b,alphabet) , int2base(x.imag,b,alphabet) )
if x<=0:
if x==0:
return alphabet[0]
else:
return '-' + int2base(-x,b,alphabet)
# else x is non-negative real
rets=''
while x>0:
x,idx = divmod(x,b)
rets = alphabet[idx] + rets
return rets
当我将十进制转换为十六进制时:
in_base16 = int2base(number, 16)
这个功能可行,但当我尝试将结果转换回十进制(即基数为10)时:
back_to_10 = int2base(in_base16, 10)
当我尝试运行它时,它会报错:
if x<=0:
TypeError: '<=' not supported between instances of 'str' and 'int'
由于某些原因,它无法将字符串转换回数字。我不明白为什么。如何将任意进制的数字转换回十进制?
"0x10" <= 0
is something python does not understand... tryint(in_base16,16)
- Joran Beasleyint(string, base)
函数将你的数字转换为整数。 - Random Davisint(string, base)
。你只需要将第二个函数调用更改为back_to_10 = int2base(int(in_base16, 16), 10)
。如果这确实是你所需要的,我已经将这个评论转换成了答案。 - Random Davis