Bonsoir,
Pourriez-vous svp me dire comment on convertit une base 16 en base 10 ?
Exemple :
137 base 16 = 311 en base 10.
Pourriez-vous me dire comment on arrive à ce résultat ?
Merci d'avance.
beegees
Bonsoir,
Pourriez-vous svp me dire comment on convertit une base 16 en base 10 ?
Exemple :
137 base 16 = 311 en base 10.
Pourriez-vous me dire comment on arrive à ce résultat ?
Merci d'avance.
beegees
Bonjour,
le plus simple pour une conversion hex2dec (hexadécimal vers décimal) est de faire une étape intermédiaire en base 2 :
base 16 => base 2 => base 10
On décompose en étapes :
1) on décompose le nombre hexa en chiffre
2) On décompose chaque chiffre en base 16 en quartet (nibble en anglais : paquet de 4 bits) binaire.
3) on convertit les quartets binaires en décimal.
--------
1) 0x137 => 1 / 3 / 7
----------------
2-A) on décompose 7 :
0x07 en quartet binaire :
0 1 1 1
-----------------
2-B) on décompose 3 :
0x03 en quartet binaire :
0 0 1 1
----------------------
2-C) on décompose 1 :
0x01 en quartet binaire :
0 0 0 1
------------------------
2-D) On rassemble les quartets :
0001 0011 0111
-----------------------
3) bin2dec :
On applique les puissances de 2 à chacune des positions dans le nombre binaire (je commence à droite, par le LSB, bit de poids faible):
(N.B: j'ai laissé tombé les 0...)
1 * 2^0 = 1
1 * 2^1 = 2
1 * 2^2 = 4
...
1 * 2^4 = 16
1 * 2^5 = 32
...
1 * 2^8 = 256
...
On ajoute le tout : 256 + 32 + 16 + 4 + 2 + 1 = 311![]()
On peut aussi faire "simple" en décomposant directement en puissances de 16 :Envoyé par beegees
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 137 base 16 = 1 * 16^2 + 3 * 16^1 + 7 * 16^0 = 1 * 256 + 3 * 16 + 7 = 256 + 48 + 7 = 311 base 10
Bonjour,
L'art de faire compliqué quand on peut faire simple.Envoyé par Neitsa
Moi, j'aurais la conversion comme ceci:
base 16 -> base 8 -> base 32 -> base 2 -> base 10
Pourquoi pas ?
L'art de faire simple mentalement ou avec un papier et un crayon sans calculatrice... tout au moins pour moi.L'art de faire compliqué quand on peut faire simple.
Si la méthode de Juju_41 est bien plus simple que celle que j'ai pu proposer, j'ai personnellement du mal avec les puissances de 16 de tête.![]()
Chacun son truc.
Bonjour,
Etant sur un forum de programmation, je ne pense pas que beegees cherche comment le faire de tête.Envoyé par Neitsa
Donc, il fallait lui expliquer l'algorithme de conversion d'une base vers une autre, dans lequel il est absolument inutile de passer par une base intermédiaire (ceci est d'ailleurs également valable s'il veut le faire de tête, peut-être que lui n'aura pas de problème avec les puissances de 16).
C'est pour ça que j'ai plaisanté un peu.
Bonjour à tous,
Merci beaucoup pour vos nombreuses réponses.
Etrangement, c'étais la seule conversion que je ne savais pas comment faire mais grâce à vous, j'ai en fin la solution.
Merci à tous et bon Week-End.
beegees
Bonjour,
Bizarre.Envoyé par beegees
Convertir d'une base à une autre est un algorithme général, peu importe les valeurs effectives des bases, quand on a compris le principe, on peut l'appliquer à n'importe quelles bases.
On rejoint là une des principes de la programmation bien conçue : travailler avec des algorithmes généraux, et ne penser aux détails qu'au moment de l'implémentation.
Bonjour,
oui.. ça date, mais je suis aussi pour du Hex->Bin->Dec.
Mais comment faire si le nombre décimal final doit être du type double ?
Donc Hexa->Dec-double. ( en partant du hex )
Extrait d'un double d'un fichier binaire en hex: 7B14AE47E17A943F .
Ce nombre en décimal est 0.02.
En binaire: 0111 1011 0001 0100 1010 1110 0100 0111 1110 0001 0111 1010 1001 0100 0011 1111 ( toujours vu du fichier binaire )
exp de convertir de base 16 à base 10::
(117)=0001 0001 0111
==>de base 16 à base 2
(0001 0001 0111)=2^9 + 2^5 + 2^3 + 2^2 + 2^1= le résultat est en décimal
sauf que tu t'es trompe d'un bit
c'est 2^8 + 2^4 + 2^2 + 2^1 + 2^0
Sinon, pour la conversion Hexa -> Decimal, je procède plutot comme ceci :
Il faut juste connaitre de tête la valeur décimale des 16 premiers chiffres Hexa.
Si je reprends la valeur précédente : 117h
1*256 + 1*16 + 7 = 279
a+ François
Partager