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 Suben vb
Martial Demolins :
ou alors j'ai mal cherché...