VBA Bin2Hex
ChristianM
ich frage mich grade, wie man eine beliebig lange Binär-Zahl in Hex umwandeln kann.
Nach meinem Verständnis werden jeweils 4 Bit des Binär-Strings (von rechts) betrachtet und diese nach Hex umgerechnet.
Die Excel-Funktion BININHEX bricht bei 9 Bit ab, bzw. bringt im Vergleich zum Windows-Calculator falsche Ergebnisse
Im Netz habe ich unter:
http://www.visualbasic.happycodings.com/Applications-VBA/code4.html
die Funktion "BinToHex" gefunden. (hier ohne Fehlerabfangung)
Function BinToHex(BinNum As String) As String
Dim BinLen As Integer, i As Integer
Dim HexNum As Variant
BinLen = Len(BinNum)
For i = BinLen To 1 Step -1
If Mid(BinNum, i, 1) And 1 Then
HexNum = HexNum + 2 ^ Abs(i - BinLen)
End If
Next i
BinToHex = HEX(HexNum)
End Function
Diese kommt mit Zeichenlängen bis 31 zurecht.ich habe mit folgendem Code versucht, das Limit aufzuheben
Function Bin2Hex(strBinary As String) As String
Dim strBin As String, strHex As String, strTmp As String
Dim bytDec As Byte, i As Integer
strBin = strBinary
Do While Len(strBin)
bytDec = 0
If Len(strBin) > 4 Then
strTmp = Right(strBin, 4)
strBin = Left(strBin, Len(strBin) - 4)
Else
strTmp = strBin
strBin = ""
End If
For i = Len(strTmp) To 1 Step -1
bytDec = bytDec + CByte(Mid(strTmp, i, 1)) * 2 ^ (Len(strTmp) - i)
Next
strHex = HEX(bytDec) & strHex
Loop
Bin2Hex = strHex
End Function
Da ich nicht grade der Hex-Experte bin frage ich mich, ob ich dabei nicht über's Ziel hinaus schießeMeine Fragen:
- ist die Vorgehensweise richtig (und sinnvoll)?
- kann man den Code evtl. optimieren, sprich kann man auf den Zwischenschritt - Umrechnung nach Dezimal - verzichten?
Als Anlage eine Exceldatei die die genannten Limits veranschaulicht.
https://www.herber.de/bbs/user/65641.xls
vielen Dank vorab an alle VBA- und Hex-Experten
Christian