Vous ne voulez probablement pas réel de l'encodage base64 pour cela -, il va ajouter du rembourrage, etc, peut-être même plus volumineuses que les cordes d'hex serait pour de petits nombres. Si il n'y a pas besoin d'interagir avec quoi que ce soit d'autre, il suffit d'utiliser votre propre codage. Par exemple. voici une fonction qui va encoder à toute la base (notez les chiffres sont en fait stockées moins significatif en premier pour éviter d'extra reverse() appelle:
def make_encoder(baseString):
size = len(baseString)
d = dict((ch, i) for (i, ch) in enumerate(baseString)) # Map from char -> value
if len(d) != size:
raise Exception("Duplicate characters in encoding string")
def encode(x):
if x==0: return baseString[0] # Only needed if don't want '' for 0
l=[]
while x>0:
l.append(baseString[x % size])
x //= size
return ''.join(l)
def decode(s):
return sum(d[ch] * size**i for (i,ch) in enumerate(s))
return encode, decode
# Base 64 version:
encode,decode = make_encoder("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
assert decode(encode(435346456456)) == 435346456456
Ceci a l'avantage que vous pouvez utiliser ce que vous voulez, simplement en ajoutant approprié
les caractères de l'encodeur de la chaîne de base.
Notez que les gains pour les grandes bases ne sont pas va être grand cependant. la base de 64 ne fera que réduire la taille de la 2/3rds de la base 16 (6 bits/char au lieu de 4). Chaque doublement ajoute seulement un peu plus par personnage. Sauf si vous avez un réel besoin de compacter les choses, simplement en utilisant hex sera probablement la plus simple et la plus rapide de l'option.