cela va peut être vous paraitre bete, mais je suis un peu perdu sur cette question.
Quelle librairie dois je utiliser pour transformer des décimales en hexa ou binaires, et vice versa.....
merci d'avance.
cela va peut être vous paraitre bete, mais je suis un peu perdu sur cette question.
Quelle librairie dois je utiliser pour transformer des décimales en hexa ou binaires, et vice versa.....
merci d'avance.
Décimaux en hexa, il y a la fonction hex
Dans l'autre sens il y a int(x, base)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 >>> hex(12) '0xc' >>> hex(5000) '0x1388'
Pur convertir en binaire à mon avis le plus simple est de faire ta propre fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 >>> int("1388", 16) 5000 >>> int("10001", 2) 17
pour convertir un nombre Décimal en binaire voici la fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 def conv_d2b(number): assert isinstance(number,str) nbase10 = int(number) newbase = [] i=int(7) #nombre de bit-1 while i >= 0: j = 0 while ((j+1) * 2 ** i <= nbase10) and (j < 1): j += 1 nbase10 = nbase10 - j * (2 ** i) newbase.append(str(j)) i -= 1 return "".join(newbase) # test # x='255' # print conv_d2b(x)
Compliqué comme code ça... En plus apparemment tu ne gères que les binaires 8 bits...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 def dec2bin(n): q, r = -1, -1 res = "" while q != 0: q, r = divmod(n, 2) res = `r` + res n = q return res
Merci pour ces infos.
par exemple je peux vous demander de commenter votre code! j'aime bien comprendre ce que j'utilise, et pourquoi.
En plus, c'est aussi utile pour les autres débutants comme moi.
merci en tout cas.
Pour ma part c'est la méthode habituelle par divisions successives par 2:
Tant que le quotient n'est pas nul, on effectue une division euclidienne par 2 (divmod revoie le tuple (quotient, reste)) et on ajoute le reste à gauche du nombre binaire
Bonjour,
Je ne suis pas certain que cela gère correctement les nombres négatifs...Envoyé par oiffrig
Ceci, je pense, devrait fonctionner :
Le nombre de bits renvoyés est toujours une puissance de 2 supérieure ou égale à 8. Sachant que la représentation interne des entiers n'est pas déterminée (il n'y a pas de taille maximale pour les entiers en Python), je me suis basé sur une petite astuce pour trouver le nombre de bits d'affichage, en déterminant d'abord le nombre de digits en hexadécimal (en retirant le préfixe '0x' ou '-0x'), puis en prenant la puissance de 2 dont l'exposant est l'entier immédiatement supérieur à la racine carré du nombre de bits en interne. Le reste est un simple décalage de bit/masquage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 import math def int2bin(x): s = '' if x < 0: prefix = 3 else: prefix = 2 nbbits_x = (len(hex(x)) - prefix) * 4 nbbits = pow(2, int(math.ceil(math.sqrt(nbbits_x)))) if nbbits < 8: nbbits = 8 for k in range(0, nbbits): s = str((x & 1 << k) >> k) + s return s
S'il existe une méthode universelle plus simple, ça m'intéresse de la connaître.![]()
A la demande générale (!), une version condensée de la même fonction :
Je suis bien d'accord sur le fait que c'est à peine lisible, mais c'était pour illustrer une fois de plus le niveau de concision auquel peut prétendre Python. Attention, cette fonction ne fonctionnera correctement qu'à partir de Python 2.4, puisque la fonction hex() ne renvoie pas une chaîne de même longueur pour les nombres négatifs dans les versions précédentes de Python.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 import math def int2bin_(x): return ''.join([str((x & 1 << k) >> k) for k in \ xrange(max((8,pow(2,int(math.ceil(math.sqrt((len(hex(x))-2-int(0 > x))*4))))))-1,-1,-1)])
Effectivement, c'est plus concis que que ma fonction.![]()
on reconnait ici la patte du 'big chief"
Je la garde sous le coude
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager