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.
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.