Hallo Zusammen
hier noch meine Lösung, wie man in verschiedene Zahlensysteme wandelt.
Sie gilt für Dezimal, Binär und Hexadezimal - lässt sich aber auch einigermassen leicht für andere Zahlensysteme verwenden.
Hier die Entscheidung, in welches Zahlensystem gewandelt werden soll.
Ich verwende die ganze Funktionalität in einem Parser/Evalfunktion drin und bauche eine Rückgabewert. Ich denke aber mal, der kann auch weggelassen und das Resultat einefach in ne Variable geschrieben werden.
'Konvertierungsfunktion. Konvertiert Zahlen von einem Zahlensystem in ein
' anderes.
Private Function Conversion(varConv As String, varValue As String) As String
On Error GoTo ConversionError
Select Case LCase(varConv)
Case "bin"
Conversion = ConversiontoBin(CDbl(varValue))
Case "dec", "dez"
If UCase(Left(varValue, 2)) = "&H" Then
Conversion = CDbl(varValue)
Else
Conversion = ConversiontoDec(varValue)
End If
Case "hex"
Conversion = ConversiontoHex(varValue)
End Select
Exit Function
ConversionError:
Conversion = "0"
End Function Anschliessend die drei Varianten zur effektiven Wandlung:
'Binäre Wandlung.
Private Function ConversiontoBin(varValue) As String
Dim varNewBin As String
On Error GoTo ConversionError
If varValue = 0 Then
varNewBin = "0"
Else
varNewBin = ""
While varValue <> 0
varNewBin = (varValue Mod 2) & varNewBin
varValue = Int(varValue / 2)
Wend
End If
ConversiontoBin = varNewBin & "b"
Exit Function
ConversionError:
ConversiontoBin = "0"
End Function 'Dezimalwandlung.
Private Function ConversiontoDec(varValue As String) As String
Dim i As Integer, char As Integer
Dim varNewDec As Double
On Error GoTo ConversionError
i = Len(varValue)
If varValue = 0 Then
varNewDec = 0
Else
varNewDec = 0
Do Until i = 0
char = Mid(varValue, i, 1)
varNewDec = char * 2 ^ (Len(varValue) - i) + varNewDec
i = i - 1
Loop
End If
ConversiontoDec = CStr(varNewDec)
Exit Function
ConversionError:
ConversiontoDec = "0"
End Function 'Wandlung ins Hexadezimale Zahlensystem.
Private Function ConversiontoHex(varValue As String) As String
Dim varNewHex As String
On Error GoTo ConversionError
'Dieses Array trägt den Hex-Zahlen-Umfang in sich, also 0-9 und A-F.
Dim arrHexArray(15) As String
arrHexArray(0) = "0"
arrHexArray(1) = "1"
arrHexArray(2) = "2"
arrHexArray(3) = "3"
arrHexArray(4) = "4"
arrHexArray(5) = "5"
arrHexArray(6) = "6"
arrHexArray(7) = "7"
arrHexArray(8) = "8"
arrHexArray(9) = "9"
arrHexArray(10) = "A"
arrHexArray(11) = "B"
arrHexArray(12) = "C"
arrHexArray(13) = "D"
arrHexArray(14) = "E"
arrHexArray(15) = "F"
If LCase(Right(varValue, 1)) = "b" Then
varValue = Left(varValue, Len(varValue) - 1)
'Wenn es eine Binäre Zahl ist, wandle sie zuerst Dezimal.
varValue = ConversiontoDec(varValue)
ElseIf LCase(Right(varValue, 1)) = "d" Then
varValue = Left(varValue, Len(varValue) - 1)
Else
GoTo ConversionError
End If
'Mit einer Modulo-Operation wird die Zahl "zerkleinert".
If varValue = 0 Then
varNewHex = "0"
Else
varNewHex = ""
While varValue <> 0
varNewHex = (arrHexArray(varValue Mod 16)) & varNewHex
varValue = Int(varValue / 16)
Wend
End If
ConversiontoHex = "&H" & varNewHex
Exit Function
ConversionError:
ConversiontoHex = "0"
End Function Grüsse aus der Schweiz |