démarrer exécuter : calc.exe
mode scientifique...
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
en vb
Martial Demolins :
ou alors j'ai mal cherché...
