Convertisseur décimal binaire hexadécimal octal

Soyez le premier à donner votre avis sur cette source.

Vue 19 977 fois - Téléchargée 766 fois

Description

Convertit en temps réel des nombres
décimaux, binaires, hexadécimaux et octaux.

Le code fourni sur cette page est composé de deux
fonctions ayant pour but de convertir un octet vers un code binaire et inversement.
Par exemple le caratère 'a' a pour code binaire 01100001 et inversement.

Source / Exemple :


''Ici une source pour convertir un Octet en binaire et inversement
Option Strict On
    Private Function VersBinaire(ByVal octet As Byte) As String

        ''Ici on converti un octet vers un code binaire

        Dim bb As String = "" '' 'bb' contiendra le code binaire de 'octet'
        Dim lo As Integer = 0 '' 'lo' servira de compte pour savoir si l'élement précedent a été noté en 1
        '' dans ce cas : lo sera incrémenté de 128 64 32 16 8 4 ou 2 sinon
        '' si l'élement précédent a été mis à 0, sa valeur restera inchangée.
        If octet >= 128 Then bb &= 1 : lo = 128 Else bb &= 0 : lo = 0 '' Si 'octet' est >= 128
        '' le premier bit est à 1 dans 'bb' et 'lo' contiendra 128
        If octet - lo >= 64 Then bb &= 1 : lo += 64 Else bb &= 0 : lo += 0 '' Pareil
        '' que précédemment : si 'octet' est >= 64 - 128 ou >= 64 - 0, alors noter '1' dans bb
        '' et incrémenter lo de 64
        If octet - lo >= 32 Then bb &= 1 : lo += 32 Else bb &= 0 '' et ainsi de suite
        If octet - lo >= 16 Then bb &= 1 : lo += 16 Else bb &= 0
        If octet - lo >= 8 Then bb &= 1 : lo += 8 Else bb &= 0
        If octet - lo >= 4 Then bb &= 1 : lo += 4 Else bb &= 0
        If octet - lo >= 2 Then bb &= 1 : lo += 2 Else bb &= 0
        If octet - lo >= 1 Then bb &= 1 Else bb &= 0 '' A la fin on peux noter que si le nombre
        '' est impaire, le dernier bit sera toujours égal à 1 sinon, paire -> 0
        ''Fin de l'algorythme, bb contient la code binaire de l'octet 'octet'

        Return bb '' La fonction renvoie bb

        '' Chr(octet) représente le caratère correspondant à la valeur de 'octet' (dans le tableau ASCII)
        '' octet peut aller de 0 à 255 inclus
        '' Hex(octet) converti 'octet' en hexadécimal
        '' le code binaire est expliqué ici :
        '' -128- 64- 32- 16-  8-  4-  2-  1  
        ''    1   0   0   0   0   0   0   0  - Ici on note une valeur de 128 car un 1 est à l'emplacement 128
        ''    1   0   0   0   0   0   0   1  - Ici on note une valeur de 129 car un 1 est à l'emplacement 128 et 1 à l'emplacement 1 (128+1)
        ''    1   0   0   0   1   0   0   1  - Ici on note une valeur de 137 car un 1 est à l'emplacement 128 et 1 à l'emplacement 8 et un 1 est à l'emplacement 1 (128+8+1)
        ''    0   0   0   0   0   0   1   1  - Ici on note une valeur de 3 car un 1 est à l'emplacement 2 et 1 à l'emplacement 1 (2+1)
        ''    1   1   1   1   1   1   1   1  - Ici on note une valeur de 255 -> 128+64+32+16+8+4+2+1
        '' Vous pouvez utiliser la calculatrice Windows pour compter
        '' en binaire octal hexadécimal ou décimal...

    End Function
    Private Function VersOctet(ByVal bits As String) As Byte

        ''Ici on converti un code binaire vers un octet
        'MessageBox.Show(bits.Length)

        ''''Vérification du code binaire
        If bits.Length <> 8 Then MessageBox.Show("Le code binaire ne correspond pas un octet") : Exit Function

        '' Vérification que bits a bien la longueur convenue (bits.length doit être égal à 8)

        For i = 0 To 7 : If bits(i) <> "0" And bits(i) <> "1" Then
                MessageBox.Show("Erreur de code binaire, le code binaire ne peut contenir que des 1 et des 0")
                Exit Function
            End If : Next i ''Vérification que bits contient bien des 0 ou des 1
        '''' Vous pouvez supprimer les vérifications si vous êtes sûr du code binaire à convertir

        Dim calcul As Byte = 0 ''Ici calcul contiendra le résultat

        If bits(0) = "1" Then calcul += CByte(128)
        If bits(1) = "1" Then calcul += CByte(64)
        If bits(2) = "1" Then calcul += CByte(32)
        If bits(3) = "1" Then calcul += CByte(16)
        If bits(4) = "1" Then calcul += CByte(8)
        If bits(5) = "1" Then calcul += CByte(4)
        If bits(6) = "1" Then calcul += CByte(2)
        If bits(7) = "1" Then calcul += CByte(1)

        Return calcul '' La fonction renvoie calcul

    End Function

    ''Utilisation :

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MessageBox.Show(VersBinaire(Asc("a")))
        '' Ou :
        'MessageBox.Show(VersBinaire(97))
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        MessageBox.Show(VersOctet("01100001").ToString)
        '' Ou :
        'MessageBox.Show(Chr(VersOctet("01100001")))
    End Sub

Conclusion :


Ce code peux servir à faire de la cryptographie,
je ne vois pas d'autre intérêt à par le coté ludique.

J'ai fait ce code parce que je n'arrivait pas
à trouver une fonction dans Visual Basic pour
faire ceci.

Maintenant c'est un convetisseur Décimal Binaire Hexadécimal Octal

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
euh oui j'ai fait un cracage mentale là ^^
je ne sais plus pourquoi ! j'ai du mélanger les deux méthodes.
cela à du me géner de faire un And avec des integers :p
dsl ++
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Pas besoin de diviser comme le dir Renfield, il suffit de vérifier si le résultat du AND est nul. Si ce n'est pas le cas, le bit est à 1.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
pas génial Adn56 de venir mettre une division la dedans...

a quoi sert le masque ET sinon ?
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
t'inquiéte c'est lisible, et puis c'est une méthode classique pour changer de base.
Celle avec le AND qui fait un "masque" puis divise par ce masque pour voir si on a 0 ou 1, n'est valable que pour le binaire et est peut être un peu moins clair à comprendre.
(Byte And C) \ C) mais c'est la même chose.

Exemple savoir si le bit 3 est true ou false dans la valeur 324
(324 And 2^3) \ 2^3)
(324 And 8) \ 8) => 01000100 And 00001000 = 0000000 donc 0
0/8 = 0
Donc le bit 3 est à false 324=(0100-(0)-100)
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
(J'avais envie de jouer avec mon scanner :p )
Sérieusement j'espère qu'il arrivera à déchiffrer ce que j'ai écrit, mon écriture est quelque peu ... illisible. Mais bon, le principal c'est qu'il voie que j'ai procédé (comme dans le programme VB) par des divisions euclidiennes successives en utilisant la base comme diviseur et le reste de division comme chiffre trouvé. Evidemment faut lire les chiffres dans l'ordre inverse, vu qu'à la première division on trouve le LSB.
Afficher les 28 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.