Décimal to hexdecimal

Soyez le premier à donner votre avis sur cette source.

Vue 3 645 fois - Téléchargée 227 fois

Description

Voici une fonction qui permet de convertir un nombre décimal en hexadecimal en utilisant une fonction récurante.

Bonne utilisation

si vous avez des optimisation elle sont les bienvenues!!

Source / Exemple :


Private Sub Text1_Change()
    Label1 = DecToHexa2(Text1)
End Sub
'
Public Function DecToHexa2(Nb)
       If Nb = "" Then Exit Function
       lenombre2 = Nb
       While Int(lenombre2 / 16) <> 0
            Select Case Int(lenombre2 / 16)
                Case Is < 10
                    DecToHexa2 = DecToHexa2 + CStr(Int(lenombre2 / 16))
                Case 10
                    DecToHexa2 = DecToHexa2 + "A"
                Case 11
                    DecToHexa2 = DecToHexa2 + "B"
                Case 12
                    DecToHexa2 = DecToHexa2 + "C"
                Case 13
                    DecToHexa2 = DecToHexa2 + "D"
                Case 14
                    DecToHexa2 = DecToHexa2 + "E"
                Case 15
                    DecToHexa2 = DecToHexa2 + "F"
                Case Is > 15
                    DecToHexa2 = DecToHexa2 + DecToHexa2(Int(lenombre2 / 16))
            End Select
            lenombre2 = lenombre2 - (Int(lenombre2 / 16) * 16)
        Wend
            Select Case lenombre2
                Case Is < 10
                    DecToHexa2 = DecToHexa2 + CStr(lenombre2)
                Case 10
                    DecToHexa2 = DecToHexa2 + "A"
                Case 11
                    DecToHexa2 = DecToHexa2 + "B"
                Case 12
                    DecToHexa2 = DecToHexa2 + "C"
                Case 13
                    DecToHexa2 = DecToHexa2 + "D"
                Case 14
                    DecToHexa2 = DecToHexa2 + "E"
                Case 15
                    DecToHexa2 = DecToHexa2 + "F"
            End Select
End Function

Private Sub Text1_KeyPress(KeyAscii As Integer)
    If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 8 Or KeyAscii = 44 Or KeyAscii = 46) Then
        KeyAscii = 0 'on annule la pression sur la touche
    End If
End Sub

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

NHenry
Messages postés
14552
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 septembre 2019
136 -
Bonjour,

Normal que ton code arrive à plus, tu n'a pas déclaré tes variables, du coup, elles sont Variant, donc pour plus, tu passes en Double, tu perds pas mal de précision par contre.

Mets TOUJOURS Option Explicit en haut de tout tes modules de code en VB6 et VBA.
loulou27200
Messages postés
3
Date d'inscription
mercredi 6 mai 2009
Statut
Membre
Dernière intervention
2 août 2011
-
Effectivement ton code est plus court
Mais je débute dans la programmation que je connais pas toutes les fonctions, ton code bloc à 2147483648 alors que le mien semble pouvoir dépasser cette valeur.
Renfield
Messages postés
17283
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56 -
Presse papier toujours une faille, mais code plus court :

Option Explicit

Private Const ES_NUMBER As Long = &H2000&
Private Const GWL_STYLE As Long = -16

Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Sub Form_Load()
SetWindowLong Text1.hwnd, GWL_STYLE, GetWindowLong(Text1.hwnd, GWL_STYLE) Or ES_NUMBER
End Sub

Private Sub Text1_Change()
Label1.Caption = DecToHexa2(Text1.Text)
End Sub

Public Function DecToHexa2(ByRef StringNb As String) As String
If Val(StringNb) Then
DecToHexa2 = Hex$(StringNb)
Else
DecToHexa2 = "0"
End If
End Function
Renfield
Messages postés
17283
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56 -
oui, mais on ne controle pas la saisie a la volée, c'est souvent vecteur d'inconfort...

rien n'empeche de saisir des caractères non autorisés via le presse papier.

voir le flag ES_NUMBER :
http://www.codyx.org/snippet_textbox-numerique-seulement_53.aspx
loulou27200
Messages postés
3
Date d'inscription
mercredi 6 mai 2009
Statut
Membre
Dernière intervention
2 août 2011
-
Pourquoi ce n'est pas bon! le control text est destiné à recevoir des chiffres et non du text, je prévois que l'utilisateur se trompe!!

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.