begin process at 2008 08 29 03:40:54
1 233 495 membres
36 nouveaux aujourd'hui
14 291 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

UN BON TUTORIEL SUR LES CONVERSION DECIMALE --> HEXADECIMALES ET INVERSEMENT


Information sur le tutorial

Catégorie :Maths Date de création : 16/10/2005 19:39:13 Vu : 15 463 fois

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

Description

Et voila, enfin sur ce site des fonctions de conversion hexadecimae --> decimale que certain on trouvé, que d'autre demande et que pourtant personne ne publie ....

Tutorial

Premierement, les systemes numériques :

Il existe trois systemes numériques principaux...

decimale:

il existe le systeme décimale qui possede 10 unité avant de passer à l'unité supérieur...
il est utilisé par tout le monde dans le language corant,etc.. il est aussi appelé base 10

sexagesimale (je ne suis pas sur de l'orthographe...):

C'est un systeme contenant soixante unité avant de passé à la supérieur
C'est le systeme que l'on utilise pour les mesures de temps (ex: il faut soixante seconde pour passé à la minute supérieur...),
ce systeme est aussi appelé base 60.

hexadecimale :

Enfin, il y a le systeme hexadecimale, qui comprend seize unité... ce systeme est utilisé dans l'informatique
pour l'ecriture des grands nombres et aussi par certains dans les petits programmes de cryptage textuelle...
Le systeme est particulierement compliqué car il utilise aussi des lettres pour unité...
les voicis :

listing 1 (unités hexadecimales) :

 1 = 1        5 = 5        9 = 9         D =  13
 2 = 2        6 = 6       A = 10       E = 14
 3 = 3        7 = 7        B = 11       F = 15
 4 = 4        8 = 8        C = 12
       

voilà,
maintenant nous connaissons les unités hexadécimales, maintenant, comment convertir un decimale en hexadécimales ?

CONVERSIONS DECIMALE --> HEXADECIMALE

En VB (VBS y compris) convertir un decimale en hexadécimales 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 decimale hexadecimale, 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, ntre fonction plutôt...
Donc, cette fonction decimale --> hexadecimale, 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...(voir listing 2)

listing 2 :

a = hex(78)                                                          'ici on l'affecte à une variable
msgbox(a)                                                           'et là on affiche le resultat

'ou directement :

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


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

 

Et maintenant......HEXADECIMALE --> DECIMALE

Il existe un calcul de conversion hexadecimale --> decimale (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 hexadecimale quelconque (bien distinguer chiffres et nombres...)...
notre nombre possede, par exemple, ici, 4 chiffres différents ou non... le nombre est donc :
n n n n

1°)nous allons numéroté notre nombre hexadecimale :
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 faite le calcul peut se résumé de cette manière aussi :
on prend un n, on le multiplie par 16 puisance l'indice du n qu'il y a juste avant et on effectue cette operation avec chaque n puis on les additionnes tous ensembles...
cela se traduit donc par

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

Voilà, vous savez convertir un hexadecimal en decimal !

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

listing 3 (la ameuse fonction !):

dim valeur                                                          'declaration publique de la variable qui va contenir la valeur décimale
                                                                            ' renvoyé par la fonction

function dec(hexa
                                          'La fonction s'appelle donc dec() et requiert un argument stocqué 
                                                                            'dans la variable hexa...
                                                                            ' Cet argument est en faite le nombre hexadecimale à convertir
dim decomp_hexa(15)                                      'declaration du tableau qui va contenir chaque chiffre hexadecimal                        

nbr=len(hexa)                                                    'la variable nbr contient le nombre de chiffre hexadecimale 
                                                                            '
que contient le nombre hexadecimal à 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)                     'decomposition de chaque chiffres grace à mid()... 
                                                                            'ces chiffres sont stocqués de droite à gauche grace
                                                                            ' à la décrémentation de la boucle

select case
decomp_hexa(g)                          'on convertis quand meme les lettres (chiffres hexadecimal) 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 stocque le tout dans la variable valeur
end function

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

listing 4 (l'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 RESULTAT EST STOCQUE DANS LA VARIABLE VALEUR,
'IL EST DONC IMPOSSIBLE D'ECRIRE CECI :   
'decimale = dec("FEB15")
'CAR LE RESULTAT EST STOCQUE 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 ecrire :


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 à etre exploiter... c'est aussi une fonction de conversion d'hexadecimale en decimale mais sauf qu'au lieu d'effectuer le calcul qui marche avec des hexadecimale de n'importe quel taille, elle vérifie chaque possibilité en partant de 1 jusqu'à ce qu'elle trouve hex()...
c'est simple mais efficace (rapide quoi...) :

listing 5 (c'est tout bonus !) :

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 hexadecimale soit égale
                                                                             ' à l'argument (hexadecimale) donné (hexa)...
a = a+1                                                                'on incrémente a de 1 à chaque execution
loop
valeur = a                                                           'valeur = la derniere fois que a a été incrémenté 
                                                                            '(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 savoirsur cette fameuse conversion !
FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN FIN
MERCI A TOUS JE VOUS AIME !
lol

;)

i am
you were...

16 octobre 2005 20:36:19 :
J'ai mis des supers belles couleurs à mon piti tutoriel... y a, du bleu, du rose, du rouge,du vert et pi dézote aussi....
16 octobre 2005 20:49:10 :
J'ai ajuster la taille des superbes commentaires
16 octobre 2005 21:00:47 :
encore pareil... désolé mais c'est difficile pasque quand je fais le tuto, une ligne prendra tant de cractere et apres quand je le regarde et ben finalement elle en prend moin, alor je dois adapté a cause des commentaires dans les litings...
  • signaler à un administrateur
    Commentaire de tekila_bandita le 16/10/2005 20:42:36

    Vas y les couleurs elles s'affichent pas!!!! :x :( :x

  • signaler à un administrateur
    Commentaire de tekila_bandita le 16/10/2005 20:51:59

    Ah si c'est bon...
    scusez moi, mais à chaque fois ça me fait flippé...

  • signaler à un administrateur
    Commentaire de sebmafate le 17/10/2005 09:32:28 administrateur CS

    mouaip tant qu'à faire un tuto... autant le faire correctement, en VB tu peux retourner une valeur d'une fonction sans forcément la mettre en global...

    public function dec(hexa as string) as Integer
    ...
    dec = valeurDeRetour
    end function

  • signaler à un administrateur
    Commentaire de tekila_bandita le 19/10/2005 17:59:22

    Oui mais je me suis adapté à vbs aussi...
    Car, si tu remarques, tu verras que j'ai marqué que le code était compatible vb/vbs... j'ai fait ce choix car, je programme vb, mais je possede visual studio que chez un pote et du coup, pour progresser j'ai du me rabaisser à vbs...
    donc voilou !

  • signaler à un administrateur
    Commentaire de Charles Racaud le 19/10/2005 22:00:13

    Je trouve la fonction n'est pas très optimiser. Pourquoi vérifier les minuscules et les majuscules alors qu'il n'y a cas tout convertir en majuscules pour simplifier.
    Mais bon, ce tuto illustre bien comment marche la fonction.
    J'ai refais une fonction plus optimiser si sa intéresse quelqu'un.
    (Note, je ne programme pas en vbs donc je ne garantis pas que ça marche avec)


    Public Function HexToDec(ByVal Hex As String) As Long
      Dim n As Long
      Dim i As Integer
      For i = 1 To Len(Hex)
        Dim CharHex As String
        CharHex = UCase(Mid(Hex, i, 1))
        If Asc(CharHex) >= 65 Then
          n = n + (Asc(CharHex) - 55) * (16 ^ (-i + Len(Hex)))
        Else
          n = n + CInt(CharHex) * (16 ^ (-i + Len(Hex)))
        End If
      Next i
      HexToDec = n
    End Function

  • signaler à un administrateur
    Commentaire de fcudel le 20/10/2005 12:17:46

    Bonne idée ce tutoriel...

    Mais j'ai lu dans l'aide de Visual Basic que la fonction Val, avec une chaîne de caractères en argument représentant une valeur hexadecimale, retournait la valeur décimale.

    Avez vous testé ceci ?

    P.S.: Une petite faute au début de ce tutoriel: c'est 'courant' et pas 'corant' ...

  • signaler à un administrateur
    Commentaire de FreddyONE73000 le 21/10/2005 18:38:21

    Bonjour à vous,

    Je me souviens avoir eu un problème pour convertir dec->hex et hex->dec alors j'ai retrouvé pour vous, de quoi pallier à divers problèmes de dépassement de cappacité ou de négatif (surement à ameliorer encore...). Je me suis basé sur des fonctions qui existent déjà mais insuffisantes pour des nombres plus élevés. Cela me revient maintenant, c'était pour convertir les N° de série des disques durs au format XXXX-XXXX (en hexa)

    Function Hex2Dec(chn As String) As Double
    Dim x As Integer, a As String * 1
    Hex2Dec = 0: If chn = "" Then Exit Function
    For x = 0 To Len(chn) - 1
    a = Mid(chn, Len(chn) - x, 1)
    Hex2Dec = Hex2Dec + val("&H" & a) * 16 ^ (x)  'On retrouve la fonction Val dont parlait FCUDEL
    Next x
    End Function

    Function Dec2Hex(d As String) As String
    If d > 4294967295# Then Dec2Hex = "Erreur": Exit Function
    If d < 0 Then d = (d / 2 + 2 ^ 31) * 2
    Dec2Hex = Hex(Int(d / 16)) & "0"
    Dec2Hex = String(8 - Len(Dec2Hex), "0") & Dec2Hex
    Dec2Hex = Left(Dec2Hex, 7) & Right(Hex(d - val("&H" & Left(Dec2Hex, 1)) * 268435456), 1)
    End Function

  • signaler à un administrateur
    Commentaire de Kite37 le 16/08/2006 15:51:52

    hum tu dis qu'il y a 16 caractères, mais en lisant ton listing, on ne peut en compter que 15 :)

Ajouter un commentaire

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Boutique

Boutique de goodies CodeS-SourceS