Python 基数36编码
我该如何在Python中将一个整数用36进制编码,然后再解码回去呢?
10 个回答
37
from numpy import base_repr
num = base_repr(num, 36)
num = int(num, 36)
这里有关于 numpy.base_repr
的信息。
39
我真希望我早些看到这个。下面是答案:
def base36encode(number):
if not isinstance(number, (int, long)):
raise TypeError('number must be an integer')
is_negative = number < 0
number = abs(number)
alphabet, base36 = ['0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '']
while number:
number, i = divmod(number, 36)
base36 = alphabet[i] + base36
if is_negative:
base36 = '-' + base36
return base36 or alphabet[0]
def base36decode(number):
return int(number, 36)
print(base36encode(1412823931503067241))
print(base36decode('AQF8AA0006EH'))
assert(base36decode(base36encode(-9223372036721928027)) == -9223372036721928027)
53
你试过维基百科上的示例代码吗?
def base36encode(number, alphabet='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
"""Converts an integer to a base36 string."""
if not isinstance(number, int):
raise TypeError('number must be an integer')
base36 = ''
sign = ''
if number < 0:
sign = '-'
number = -number
if 0 <= number < len(alphabet):
return sign + alphabet[number]
while number != 0:
number, i = divmod(number, len(alphabet))
base36 = alphabet[i] + base36
return sign + base36
def base36decode(number):
return int(number, 36)
print(base36encode(1412823931503067241))
print(base36decode('AQF8AA0006EH'))