kali decode64 python

decode64 - Codificación Python base 36



decode64 linux (7)

¿Cómo puedo codificar un entero con base 36 en Python y luego decodificarlo nuevamente?


¿Has probado el código de muestra de Wikipedia?

def base36encode(number, alphabet=''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ''): """Converts an integer to a base36 string.""" if not isinstance(number, (int, long)): 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'')


Esto funciona si solo te importan los enteros positivos.

def int_to_base36(num): """Converts a positive integer into a base36 string.""" assert num >= 0 digits = ''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'' res = '''' while not res or num > 0: num, i = divmod(num, 36) res = digits[i] + res return res

Para volver a convertir a int, simplemente use int(num, 36) . Para una conversión de bases arbitrarias, consulte https://gist.github.com/mbarkhau/1b918cb3b4a2bdaf841c


Ojalá hubiera leído esto antes. Aquí está la respuesta:

def base36encode(number): if not isinstance(number, (int, long)): raise TypeError(''number must be an integer'') if number < 0: raise ValueError(''number must be positive'') alphabet, base36 = [''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'', ''''] while number: number, i = divmod(number, 36) base36 = alphabet[i] + base36 return base36 or alphabet[0] def base36decode(number): return int(number, 36) print(base36encode(1412823931503067241)) print(base36decode(''AQF8AA0006EH''))



Puedes usar numpy base_repr(...) para esto.

import numpy as np num = 2017 num = np.base_repr(num, 36) print(num) # 1K1 num = int(num, 36) print(num) # 2017

Aquí hay información sobre numpy , base_repr(...) y np.base_repr(number, base=2, padding=0) .

(Esta respuesta se envió originalmente como una edición de la respuesta de @ christopher-beland, pero se rechazó a favor de su propia respuesta).


Respuesta terrible, pero solo estaba jugando con esto un pensamiento que compartiría.

import string, math int2base = lambda a, b: ''''.join( [(string.digits + string.lowercase + string.uppercase)[(a/b**i)%b] for i in xrange(int(math.log(a, b)), -1, -1)] ) num = 1412823931503067241 test = int2base(num, 36) test2 = int(test, 36) print test2 == num


from numpy import base_repr num = base_repr(num, 36) num = int(num, 36)

Aquí hay información sobre numpy .