Changement de base (base décimal vers exadecimal)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 605 fois - Téléchargée 32 fois

Contenu du snippet

Ce code permet de changer de base pour un nombre.
Il a été écrit pour passer de la base exadecimale a la base decimale, mais en changeant la variable digit, vous pouvez configurer le programme pour qu'il passe d'une base décimale a une base octale, binaire ou une base 60 (si vous voulez vous amuser a trouver 1 digit pour chacun des 60, sa vous regarde :p ). Vous l'aurez compris c'est entierement parametrable..

Je sais que c'est un sujet bateau, mais bon, quand on a rien a faire hein..

Source / Exemple :


# -*- 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

Conclusion :


Il n'y a pas beaucoup de commentaires mais c'est un code facile, et si vous avez des quetsions je peu y repondre.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
15 février 2010

Bonjour,
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 :-) !
Messages postés
12
Date d'inscription
mardi 28 octobre 2003
Statut
Membre
Dernière intervention
13 décembre 2006

Je propose cela :
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
Messages postés
3
Date d'inscription
vendredi 29 juillet 2005
Statut
Membre
Dernière intervention
14 avril 2009

Petites modifications sur ton code A+
Messages postés
35
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Erf desolé, bug de codes-sources ^^
Messages postés
35
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
29 octobre 2007

tant qu'on est aux raccourcis :

s = s + l

peut s'écrire

s += l
Afficher les 13 commentaires

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.

Du même auteur (cs_Marvin)