Conversions de bases (binaire,octal,decimal,hexadecimal) simplistes en vb.net

Soyez le premier à donner votre avis sur cette source.

Snippet vu 21 569 fois - Téléchargée 42 fois


Contenu du snippet

Voila, ce code ne met pas en oeuvre un calcul de base (je pense qu'il y en a deja assez en vb6, la maniere n'a pas lieu d'etre changé (à une expression pret) en vb.net vu que ce n'est que des calculs), mais il utilise simplement les fonctions de vb.net prévues à cet effet . plus ou moins rapides, il faudrait faire des tests... mais vu que ici, le code est limité aux capacités d'un type Long, je pense que la difference ne se ferait humainement pas sentir... enfin si les conversions ne sont pas faites en boucles. Bref, à vous de voir. :)

Source / Exemple :


'On prend donc en compte que l'on à 4 textbox nommées : "decitxt", "bintxt", "octtxt", "hextxt" dont les noms sont, je pense, assez explicites pour m'eviter d'expliquer le role de chacuns

    'Les procédures de conversions
    ' la syntaxe : Convert.le_type_voulut(la_valeur_de_depart,le mode de conversion*) *ici la base de conversion
    Public Sub convertfrombase10(ByVal dec As String)
        bintxt.Text = Convert.ToString(CLng(dec), 2) 'converti la valeur Long de "dec" en base 2
        octtxt.Text = Convert.ToString(CLng(dec), 8) 'converti la valeur Long de "dec" en base 8
        hextxt.Text = Convert.ToString(CLng(dec), 16) 'converti la valeur Long de "dec" en base 16
    End Sub

    Public Sub convertfrombase2(ByVal binr As String)
        decitxt.Text = Convert.ToInt64(binr, 2) 'converti en type int64(equivalent de long) et en base 10 la valeur de "binr" à partir d'une base 2 
        bintxt.Text = Convert.ToString(CLng(decitxt.Text), 8) 'converti la valeur Long de decitxt.text en base 8
        hextxt.Text = Convert.ToString(CLng(decitxt.Text), 16) 'converti la valeur Long de decitxt.text en base 16
    End Sub

    Public Sub convertfrombase8(ByVal octal As String)
        decitxt.Text = Convert.ToInt64(octal, 8) 'converti en type int64 (equivalent de long) et en base10 la valeur de "octal" à partir d'une base 8
        bintxt.Text = Convert.ToString(CLng(decitxt.Text), 2) 'converti la valeur Long de decitxt.text en base 2
        hextxt.Text = Convert.ToString(CLng(decitxt.Text), 16) 'converti la valeur Long de decitxt.text en base 16
    End Sub

    Public Sub convertfrombase16(ByVal hexa As String)
        decitxt.Text = Convert.ToInt64(hexa, 16) 'converti en type int64(equivalent de long) et en base 10 la valeur de "hexa" à partir d'une base 16 
        bintxt.Text = Convert.ToString(CLng(decitxt.Text), 2) 'converti la valeur Long de decitxt.text en base 2
        octtxt.Text = Convert.ToString(CLng(decitxt.Text), 8) 'converti la valeur Long de decitxt.text en base 8
    End Sub

    'Les procédures de limitation de saisie de charactères : 
    'on limite aux caractères autorisés pour les bases, ainsi qu'à la touche "back"
    Private Sub decitxt_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles decitxt.KeyPress
        'tout chiffre, de 0 à 9
        If e.KeyChar.IsDigit(e.KeyChar) = False And Asc(e.KeyChar) <> System.Windows.Forms.Keys.Back Then e.Handled = True
    End Sub

    Private Sub bintxt_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles bintxt.KeyPress
        '0 ou 1
        If Asc(e.KeyChar) <> 48 And Asc(e.KeyChar) <> 49 And Asc(e.KeyChar) <> System.Windows.Forms.Keys.Back Then e.Handled = True
    End Sub

    Private Sub octtxt_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles octtxt.KeyPress
        'de 0 a 7
        If Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 55 And Asc(e.KeyChar) = System.Windows.Forms.Keys.Back Then e.Handled = False Else e.Handled = True
    End Sub

    Private Sub hextxt_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles hextxt.KeyPress
        'tout chiffre de 0 à 9 et les charactéres A,B,C,D,E,F (majuscules seulement)
        If e.KeyChar.IsDigit(e.KeyChar) = True Or (Asc(e.KeyChar) >= 65 And Asc(e.KeyChar) <= 70) Or Asc(e.KeyChar) = System.Windows.Forms.Keys.Back Then e.Handled = False Else e.Handled = True
    End Sub

    'le lancement des procédures de conversions par l'evenement keyup
    'je met une gestion d'erreur, en cas par exemple de depassement de capacité d'un long
    Private Sub decitxt_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles decitxt.KeyUp
        Try
            convertfrombase10(decitxt.Text)
        Catch ex As Exception
            MsgBox(ex.Message.ToString)
        End Try
    End Sub

    Private Sub bintxt_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles bintxt.KeyUp
        Try
            convertfrombase2(bintxt.Text)
        Catch ex As Exception
            MsgBox(ex.Message.ToString)
        End Try
    End Sub

    Private Sub octtxt_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles octtxt.KeyUp
        Try
            convertfrombase8(octtxt.Text)
        Catch ex As Exception
            MsgBox(ex.Message.ToString)
        End Try
    End Sub

    Private Sub hextxt_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles hextxt.KeyUp
        Try
            convertfrombase16(hextxt.Text)
        Catch ex As Exception
            MsgBox(ex.Message.ToString)
        End Try
    End Sub

Conclusion :


bah d'habitude j'ai pas grand chose à dire pour conclure mais la, encore moins. mais ca y est, j'ai comblé :) .

A voir également

Ajouter un commentaire

Commentaires

anonimus48
Messages postés
9
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
24 août 2006
-
(P.S:Ton code reste tres bien.) desoler pour l'erreur.
anonimus48
Messages postés
9
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
24 août 2006
-
On peut faire plus simple en utilisant:
Conversion.Fix()
Conversion.Hex()
Conversion.Int()
Conversion.Oct()
Conversion.Str()
Conversion.Val()
(Conversion=Microsoft.VisualBasic.Conversion)
P.S:Ton est reste tres bien.
hvb
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
1 -
faut vraiment que je remette à jour ce code qui date, c'est moche comme sample.

titounours : ajoute juste un .ToUpper au resultat hexa... et tu auras ta chaine en MAJUSCULES.
hextxt.Text = Convert.ToString(CLng(dec), 16).ToUpper
cs_Bidou
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
42 -
cs_titounours
Messages postés
33
Date d'inscription
jeudi 26 octobre 2000
Statut
Membre
Dernière intervention
28 février 2007
-
Juste un petit bémol quand même. Quand ont transforme une valeur en héxadécimale, elle n'est pas en majuscule (ex. de résultat : ffff au lieu de FFFF).Mais je répète ce que je viens d'écrire juste au dessus : "MERCI !!!"

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.