J’essaye de créer un convertisseur du binaire vers l’hexadécimal, mais pour des raisons qui me sont inconnus mon programme me retourne une mauvaise valeur. Merci d’avance du temps que vous me consacrerez.
def multiple_quatre(x):
hexa = ''
x=str(x)
while len(x)%4==0:
x='0'+ x
for i in range(len(x)//4):
b=x[4*i:4*i+4]
l=['0000','0001','0010','0011','0100','0101','0110','0111','1000','1001','1010','1011','1100','1101','1110','1111']
c = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
for k in range(15):
if b == l[k]:
hexa = hexa+c[k]
return hexa
print(multiple_quatre(''))
d = {'':'0','1':'1','10':'2','11':'3','100':'4','101':'5','110':'6','111':'7','1000':'8','1001':'9','1010':'A','1011':'B','1100':'C','1101':'D','1110':'E','1111':'F'}
foo = lambda s,r='': s and foo(s[:-4],d[s[-4:].lstrip('0')]+r) or r
print(foo('11101100101001'))
# ~ 3B29
ou
d = {'0000':'0','0001':'1','0010':'2','0011':'3','0100':'4','0101':'5','0110':'6','0111':'7','1000':'8','1001':'9','1010':'A','1011':'B','1100':'C','1101':'D','1110':'E','1111':'F'}
foo = lambda s,r='': s and foo(s[:-4],d[s[-4:].zfill(4)]+r) or r
On peut convertir de n'impoorte quelle base symbolique vers une autre si on a la liste des symboles de chaque base. Dans mon code, je ne considère pas les nombres négatifs ni les erreurs de symboles. - def numericToSymbolic(n, base): b = len(base) s = "" while n > 0: s=base[n%b] + s n //= b return s or base[0] def symbolicToNumeric(s, base): b = len(base) n=0 for c in s: n *= b n += base.index(c) return n # sym = "11010" print(numericToSymbolic(symbolicToNumeric(sym, "01"), "0123456789ABCDEF"))
Le Tout est souvent plus grand que la somme de ses parties.
Pour les utilisateurs de Unix / Linux avec GNU sed, on est presque obligé de connaître les regex. J'ai déjà réussi à convertir un programme Pascal en C d'environ 3000 lignes avec un script sed.
(c'était du code compressé à la josmiley )
Je ne sais pas si je pourrais encore le faire ...
Ce que j'aime de re.sub() est qu'on peut lui donner une fonction au lieu d'une chaîne. Mais c'est moins évident d'analyser les groupes quand il y en a.
edit:
Voici une version lambda de mes fonctions:
s2n=lambda s, base, n=0: n if not s else s2n(s[1:], base, n=n*len(base)+base.index(s[0])) n2s=lambda n, base, s="": s or base[0] if n==0 else n2s(n//len(base), base, s=base[n%len(base)]+s)
- Edité par PierrotLeFou 17 octobre 2022 à 4:22:13
Le Tout est souvent plus grand que la somme de ses parties.
Sinon pour répondre au PO, ton problème se situe dans la 1ère boucle while de ta fonction, teste la en dehors, tu verras qu'elle ne fait pas que tu veux qu'elle fasse. (tu dois en plus gérer le cas de la chaine vide car 0%4=0)
Convertisseur binaire hexadécimal
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Le Tout est souvent plus grand que la somme de ses parties.
Python c'est bon, mangez-en.
Le Tout est souvent plus grand que la somme de ses parties.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Le Tout est souvent plus grand que la somme de ses parties.