python十进制和任意进制转化
注: int可以在2-36进制到10进制的转换,默认超过10后采用小写的abc字符
这里的是 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" 有所区别
# -*- coding: utf-8 -*-
"""2-62进制整数和10进制之间转换"""
BASES = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
def base10_to_n(num, b):
"""
>>> base10_to_n(270, 16)
'10E'
>>> base10_to_n(20037, 62)
'5DB'
"""
assert 2 <= b <= 62
return ((num == 0) and "0" ) or ( base10_to_n(num // b, b).lstrip("0") + BASES[num % b])
def basen_to_10(s, b):
"""如果追求效率,可以把下面的BASES改为map映射
>>> basen_to_10('10E', 16)
270
>>> basen_to_10('5DB', 62)
20037
"""
assert 2 <= b <= 62
size = len(s)
return sum([BASES.index(j)*(b**(size-i-1)) for i, j in enumerate(s)])
if __name__ == "__main__":
import doctest
doctest.testmod()