Python允许通过
int(str, base).
如何做逆:从整数创建字符串,也就是说int2base(num, base)
,以便:
int(int2base(x, b), b) == x
函数名称/参数顺序不重要。
任何数字x
和baseb
那int()
会接受的。
我知道这些功能bin
,,,oct
,,,hex
,不能使用它们有几个原因:
def baseN(num,b,numerals="0123456789abcdefghijklmnopqrstuvwxyz"):
return ((num == 0) and numerals[0]) or (baseN(num // b, b, numerals).lstrip(numerals[0]) + numerals[num % b])
请注意,这可能会导致
RuntimeError: maximum recursion depth exceeded in cmp
非常大的整数。
如果您需要与Python的旧版本兼容,可以使用gmpy(它确实包括一个快速的、完全通用的int到string转换函数,并且可以为这样的古老版本构建---您可能需要尝试旧版本,因为最近的版本还没有测试过值得尊敬的Python和GMP版本,只是最近的版本而已)。为了降低速度,但更方便,请使用Python代码--例如,最简单的:
import string
digs = string.digits + string.letters
def int2base(x, base):
if x < 0:
sign = -1
elif x == 0:
return digs[0]
else:
sign = 1
x *= sign
digits = []
while x:
digits.append(digs[x % base])
x /= base
if sign < 0:
digits.append('-')
digits.reverse()
return ''.join(digits)