Un bon tutoriel sur les conversion decimale --> hexadecimales et inversement

conversion décimale --> hexadécimale et inversement

Les systèmes numériques

Il existe trois systèmes numériques principaux...

Décimal

Il existe le système décimal qui possède 10 unités avant de passer à l'unité supérieure.
il est utilisé par tout le monde dans le langage courant,etc.. il est aussi appellé base 10

Sexagésimal

C'est un système contenant soixante unités avant de passer à la supérieure
C'est le système que l'on utilise pour les mesures de temps (ex: il faut soixante secondes pour passer à la minute supérieure).
Ce système est aussi appelé base 60.

Hexadécimal

Enfin, il y a le système hexadécimal, qui comprend seize unités. Ce système est utilisé dans l'informatique pour l'écriture des grands nombres et aussi par certains dans les petits programmes de cryptage textuel.
Le système est particulièrement compliqué car il utilise aussi des lettres pour unités.

Voici les unités hexadécimales :
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E et F.
A vaut 10
B vaut 11
C vaut 12
D vaut 13
E vaut 14
F vaut 15

Voilà, maintenant que nous connaissons les unités hexadécimales, comment convertir un décimal en hexadécimal ?

CONVERSION DECIMAL --> HEXADECIMAL

En VB (VBS y compris) convertir un décimal en hexadécimal est très simple car visual basic est doté d'une fonction simple.
Mais alors, pourquoi ce tutoriel ?!
Visual basic est doté d'une fonction de conversion décimal - hexadécimal, mais pas le contraire !
Bizarre n'est-ce pas?
oui, c'est bête et je ne sais pas pourquoi, et c'est pour ça que tout le monde recherche cette fonction inverse...
Bon, retournons à nos moutons...Euh... NAN, notre fonction plutôt...
Donc, cette fonction décimal --> hexadécimal, s'appelle tout simplement hex()...
voici sa syntaxe :

'
hex(Integer)   'Integer = entier en Français
'

Pour l'utiliser, rien de plus simple, on peut l'utiliser "cru" ou l'affecter à une variable...

Exemple :

'
a  = hex(78)   'ici on l'affecte à une variable
MsgBox(a)      'et là on affiche le résultat
'
'ou directement :

MsgBox(hex(78))   'c'est cela que j'appelle l'utilisation "cru" de la fonction...
'

Et voila ! vous savez convertir un nombre décimal en un nombre hexadécimal !
Maintenant, c'est comme si vous saviez crypter un texte mais pas le décrypter...C'EST CON CA HEIN!?

HEXADECIMAL --> DECIMAL

Il existe un calcul de conversion hexadécimal --> décimal (je vais vous le donner...), mais si vous avez la flemme d'appliquer ce calcul dans une fonction VB/VBS, alors je vais aussi vous la donner.

D'abord, le calcul :

Soit n un chiffre hexadécimal quelconque (bien distinguer chiffres et nombres...). Notre nombre possède, par exemple, ici, 4 chiffres différents ou non. Le nombre est donc :
n n n n

1°) Nous allons numéroter notre nombre hexadécimal :
n4 n3 n2 n1

2°) Le calcul est donc la somme des produits de chaque n et de 16 puissance l'indice du "n" inférieur. Compliqué ? Dit comme ça oui.. mais en fait le calcul peut se résumer de cette manière aussi :
On prend un n, on le multiplie par 16 puissance l'indice du n qu'il y a juste avant et on effectue cette opération avec chaque n puis on les additionne tous ensembles...
Cela se traduit donc par

n4 n3 n2 n1 = n4*163+ n3*162+ n2* 161+ n1*160

Voilà, vous savez convertir un hexadécimal en décimal !

Mais bon, comme j'en connais qu'on pas envie de se faire ch*** à traduire ça dans une fonction, je vous donne celle que j'ai faite... :

Le code de ladite fonction :

Dim valeur 'déclaration publique de la variable qui va contenir la valeur décimale
                 'renvoyée par la fonction

Function dec(hexa) 'La fonction s'appelle donc dec() et requiert un argument stocké 
                              'dans la variable hexa...
                              'Cet argument est en fait le nombre hexadécimal à convertir

Dim decomp_hexa(15) 'déclaration du tableau qui va contenir chaque chiffre hexadécimal                        

nbr =Len(hexa) 'la variable nbr contient le nombre de chiffre hexadécimal 
                        'que contient le nombre hexadécimal à convertir
For a =  nbr To 1 Step -1 'La boucle qui va se charger de décomposer les chiffres
    g=g+1
    decomp_hexa(g)=mid(hexa, a, 1) 'décomposition de chaque chiffre grâce à mid()... 
                                                       'ces chiffres sont stockés de droite à gauche grâce
                                                       'à la décrémentation de la boucle

    Select Case decomp_hexa(g) 'on convertit quand même les lettres (chiffres hexadécimal) pour le calcul
        Case "A"
            decomp_hexa(g)=10

        Case "a"
            decomp_hexa(g)=10

        Case "B"
            decomp_hexa(g)=11

        Case "b"
            decomp_hexa(g)=11

        Case "C"
            decomp_hexa(g)=12
     
        Case "c"
            decomp_hexa(g)=12

        Case "D"
            decomp_hexa(g)=13

        Case "d"
            decomp_hexa(g)=13

        Case "E"
            decomp_hexa(g)=14

        Case "e"
            decomp_hexa(g)=14

        Case "F"
            decomp_hexa(g)=15

        Case "f"
            decomp_hexa(g)=15

    End select
Next

For b = 1 To nbr                                   'voici la boucle du calcul
    calcul = decomp_hexa(b)*16^(b-1)   'on effectue les produits
    c=c+calcul                                        'on les additionne
next
valeur = c                                             'on stocke le tout dans la variable valeur
End Function

Voila, c'est bien beau, mais comment utiliser cette fonction, même si on débute et on n'a rien compris....?
Eh ben on fait copié, collé au début de son code et ensuite, une fois que cette fonction a été collée au début du script l'utilisant, voici comment on l'utilise :

Exemple d'utilisation de la fameuse fonction :

'ici le code copié/collé de la fonction

dec("F6EBA")         'on est pas obligé de mettre des majuscules....
MsgBox(valeur)                                                                                                                       
'JE RAPPELLE QUE LE RÉSULTAT EST STOCKE DANS LA VARIABLE VALEUR,
'IL EST DONC IMPOSSIBLE D'ÉCRIRE CECI :    
'decimale  = dec("FEB15")
'CAR LE RÉSULTAT EST STOCKE DANS UNE VARIABLE CAR C'EST UNE FONCTION "FAITE MAISON" 
'ET QU'ELLE NE PEUT DONC PAS RENVOYER DE VALEUR MAIS UNE VARIABLE
'il faut donc écrire :

dec("FEB15")
decimale = valeur
MsgBox(valeur)

VOILA ! vous savez maintenant tout sur cette fabuleuse conversion !
Tout!? Ah, non! J'oublie une fonction plus simple mais qui prend plus de temps à être exploitée... C'est aussi une fonction de conversion d'hexadécimal en décimal mais sauf qu'au lieu d'effectuer le calcul qui marche avec des hexadécimals de n'importe quelle taille, elle vérifie chaque possibilité en partant de 1 jusqu'à ce qu'elle trouve hex()...
c'est simple mais efficace (rapide quoi...) :

Le code :

Dim valeur                    'la c'est pareil qu'en haut
Function dec(hexa)      'ici aussi
a  = 1                           'on initialise a à 1

Do until hexa = hex(a)  'effectuer la boucle tant que la conversion de a en hexadécimal soit égale
                                     ' à l'argument (hexadécimal) donné (hexa)...
    a = a+1                     'on incrémente a de 1 àchaque exécution
loop
valeur = a                     'valeur la dernière fois que a a été incrémentée 
                                     '(la fois ou hex(a) est égale à l'argument)
End Function                'the end

Alors là c'est pareil pour l'exploitation de la fonction...

VOILA !
je vous ai transmis tout mon savoir sur cette fameuse conversion !

;)

i am
you were...

A voir également
Ce document intitulé « Un bon tutoriel sur les conversion decimale --> hexadecimales et inversement » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous