Convertisseur d'une base vers une autre

5/5 (5 avis)

Snippet vu 3 987 fois - Téléchargée 30 fois

Contenu du snippet

Bonjour,
Ce n'est malheuresment pas moi qui ait ecrit ce code soyons honnete...
Je met ce code car il permet de faire des conversions d'une base vers une autre de maniere tres simple (hexa vers binaire, 10 vers 16, 2 vers 10 etc...)
J'espere que ce code servira a certains d'entre vous

Cordialement
Valerian

PS j'ai mis le code comme ca desole pour les inconditionnels du zip mais vous avez juste a faire du CtrlC/CtrlV et le tour est joué :-p

Source / Exemple :


Option Explicit

Public Function DecimalToBase(ByVal nNumber As Long, ByVal DstBase As Long) As String

    Do While (nNumber >= DstBase)
        DecimalToBase = NumberToSymbol((nNumber Mod DstBase), DstBase) & DecimalToBase
        If DstBase >= 36 Then DecimalToBase = "." & DecimalToBase
        nNumber = nNumber \ DstBase
    Loop
    DecimalToBase = NumberToSymbol(nNumber, DstBase) & DecimalToBase

End Function

Public Function NumberToSymbol(ByVal nNumber As Long, ByVal DestBase As Long) As String

    If ((nNumber >= 10) And (nNumber < 36) And DestBase < 36) Then
        NumberToSymbol = Chr(Asc("A") + (nNumber - 10))
    Else
        NumberToSymbol = nNumber
    End If

End Function

Public Function BaseToDecimal(ByVal sNumber As String, ByVal SrcBase As Long) As Long

    Dim i As Integer
    Dim v() As String

    If SrcBase < 36 Then
        For i = 0 To Len(sNumber) - 1
            BaseToDecimal = BaseToDecimal + SymbolToNumber(Mid(sNumber, Len(sNumber) - i, 1)) * (SrcBase ^ i)
        Next
    Else
        v() = Split(sNumber, ".")
        For i = 0 To UBound(v)
            BaseToDecimal = BaseToDecimal + SymbolToNumber(v(UBound(v) - i)) * (SrcBase ^ i)
        Next
    End If

End Function

Public Function SymbolToNumber(ByVal sSymbol As String) As Long

    If Len(sSymbol) = 1 And Asc(UCase(sSymbol)) >= Asc("A") And Asc(UCase(sSymbol)) <= Asc("Z") Then
        SymbolToNumber = (Asc(UCase(sSymbol)) - Asc("A")) + 10
    Else
        SymbolToNumber = CLng(sSymbol)
    End If

End Function

Public Function BaseToBase(ByVal vNumber As Variant, ByVal SrcBase As Long, ByVal DstBase As Long) As Variant

    Dim nDecTemp As Long

    If (SrcBase <> 10) Then
        nDecTemp = BaseToDecimal(vNumber, SrcBase)
    Else
        nDecTemp = vNumber
    End If

    If (DstBase <> 10) Then
        BaseToBase = DecimalToBase(nDecTemp, DstBase)
    Else
        BaseToBase = nDecTemp
    End If

End Function

Private Sub Form_Load()

    MsgBox BaseToBase("101010101", 2, 16)
    MsgBox BaseToBase("AEF09", 16, 10)
    MsgBox BaseToBase("255.126.0", 256, 10)

End Sub

Conclusion :


Quelques breves explications:
La fonction DecimalToBase permet de convertir une représentation décimale en n'importe quelle base ; inversément, la fonction BaseToDecimal permet de convertir n'importe quelle représentation en représentation décimale. Notons que si la base est supérieure ou égale à 36, des nombres décimaux sont utilisés pour représenter les différentes composantes, ceux-ci étant séparés par un point.

La fonction NumberToSymbol permet à partir d'un nombre donné, d'en trouver son symbole. Exemple 10 devient A, 11 devient B, etc... SymbolToNumber étant la fonction inverse.

La fonction BaseToBase permet, quant à elle, de convertir la représentation d'un nombre d'une base quelconque vers une autre base quelconque par le biais des fonctions DecimalToBase et BaseToDecimal.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
242
Date d'inscription
jeudi 8 janvier 2004
Statut
Membre
Dernière intervention
10 novembre 2005

Ca vaut un bon 10!
Bien présenté, avec un exemple comment utiliser les fonctions dans un formulaire.
Tout est prêt pour rejoindre un module!

Super ++
Messages postés
96
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
22 août 2004

Merci M'sieur ! :D
Messages postés
140
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
26 juillet 2004

bon merci, c honnete!
des que j'ai fini le boulot que mon boss me demande, je me penche dessus pour vous mettre ca un peu plus en forme, promis avec une belle user form en couleur et tout et tout!
:)
Messages postés
96
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
22 août 2004

Ben y a pas grand chose a dire, pas d'interface, pas de source, des résultats affichés par msgbox, et c'est pas de toi :p
Messages postés
140
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
26 juillet 2004

J'ai changé le titre de ma source car elle est plus significative comme ca.
n'hesitez pas au commentaires et notes

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.