Soyez le premier à donner votre avis sur cette source.
Snippet vu 15 004 fois - Téléchargée 32 fois
# -*- coding: cp1252 -*- #Traduit un exa en decimal et visse-versa. #Les digits exa-decimaux (vous pouvez les changer pour faire un traducteur decimal-octal, binaire ou autre...Le reste du programme s'adapte tout seul.) digits = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"] #Ca retranscrit une table (ex: [14,12,8]) en nombre exa.(ex: 8ce). #Attention! le tableau doit etre inverse!! def table2exa(table,size): c = 1 nombre = "" while c <= size: valeur = table[-c] c = c + 1 nombre = nombre + digits[valeur] return nombre #Je ne connait pas la methode 'normale' pour les exposants, alors j'ai créé la mienne. def exposant(a,b): c = 0 r = 1 while c < b: r = r * a c = c + 1 return r #Cette classe definit un nombre decimal. class nDecimal: nombre = 0 def __init__(self,valeur): self.nombre = valeur def translate(self): n = self.nombre m = 0 nexa = [] s = 0 si = digits.index(digits[-1],-1)+1 while n != 0: s = s + 1 m = n % si n = n / si nexa = nexa + [m] nombre = table2exa(nexa,s) return nombre #Cette classe définit un nombre exadecimal. class nExadecimal: nombre = "" def __init__(self,valeur): self.nombre = valeur def translate(self): nombre = self.nombre size = nombre.rfind(nombre[-1])+1 ns = "" s = 0 while s < size: s = s + 1 ns = ns + nombre[-s] nombre = digits.index(ns[0]) si = digits.index(digits[-1],-1)+1 s = 1 while s < size: nombre = nombre + digits.index(ns[s]) * exposant(si,s) s = s + 1 return nombre
Le code précédent bien appréciable, mais il y'a une tite erreur,
au lieu de "hex+=hexa_car(nb%16)# dernier chiffre a droite",
il faut "hex=hexa_car(nb%16)+hex",
sinon au delà de 256, les derniers chiffres sont intervertis
(pour 257 on a 110 en hexa au lieu de 101).
Bon code, avec mes bénédictions :-) !
def hexa_car(r): # r de 0 a 15
if r<10 : return str(r) # de 0 a 9
else :return chr(r+55) # de A a F
def hexa(nb):
hex=""
while nb>=16 : # on divise par seize,
hex+=hexa_car(nb%16)# dernier chiffre a droite,
nb= nb/16 # on passe aux chiffres suivants
return hexa_car(nb%16)+hex
s = s + l
peut s'écrire
s += l
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.