Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Hex 2 Bin

Hex 2 Bin
17.11.2017 13:07:12
Basti
Hallo Forum,
hab wieder meine VBA-Grenzen erreicht. Das Thema wird zu Hauf im World-Wide-Web erwähnt nur habe ich keine Ahnung, wie ich meine Idee umsetzen kann.
Ich möchte, dass alle Zellen im markierten Bereich von Hexadezimal in Binär umgewandelt werden.
Sub test()
Debug.Print HexToBin(410)
End Sub

Function HexToBin(sHex As String)
Dim normal As String, reverse As String, requiredLength As Integer, i As Integer, sFormat    _
_
_
As String
'Reversed with strange formatting :-)
sFormat = "@@@@-@@@@-@@@@-@@@@"
' straight conversion via decimal
normal = CStr(DecToBin(HexToDec(sHex)))
'pad to required lengths
Select Case Len(normal)
Case Is > 8
requiredLength = 16
Case Is > 5
requiredLength = 8
Case Else
requiredLength = 5
End Select
Do While Len(normal) 
Vielen Dank für Eure Hilfe.
Gruß
Basti
Anzeige

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hex 2 Bin
17.11.2017 14:45:52
Daniel
Hi
du sollest deine eigenen Funktionen nicht so nennen wie bereits bestehende VBA- und Excelfunktionen.
das könnte Verwechslungen geben.
eine Umwandlung von Hexadezimal in Binär würde ich mit einfachem Text ersetzen durchführen:
ersetze (in der richtigen Reihenfolge)
"0" durch "0000"
"1" durch "0001"
"2" durch "0010"
"3" durch "0011"
...
"E" durch "1110"
"F" durch "1111"
Gruß Daniel
Anzeige
Das meinst du aber nicht im Ernst Daniel? (owT)
17.11.2017 15:23:31
EtoPHG

AW: Ausprobiert?
17.11.2017 16:20:35
Daniel
in welchen Fällen würde denn meine Methode kein korrektes Ergebnis liefern?
Gruß Daniel
Darum ging's sicher nicht, ...
17.11.2017 18:12:29
Luc:-?
…Daniel,
sondern um 16× ersetzen! Allerdings käme in diesem Fall auch bei integriertem Vorzeichen eine richtige Umwandlung heraus. Schwierig würde es nur mit Xl-/vbFktt und bei Umwandlung in DezimalZahlen wdn. Dabei könnte dann auch eine Rolle spielen, ob DezimalZiffern nur hexadezimal codiert wurden, was eigentlich der Inhalt meines 1.Pkts unten wdn sollte…
Gruß, Luc :-?
Anzeige
AW: Darum ging's sicher nicht, ...
17.11.2017 18:46:08
Daniel
ja mei, was ist schon 16x ersetzen.
da kann man ja eine intelligente Schleife basteln
oder man läuft mit einer Schleife durch den Text und ersetzt jede Hex-Ziffer einzeln.
die rein textbasierte Methode hätte halt den Vorteil, dass sie Hex- und Bin-Zahlen in beliebiger Größe verarbeiten kann.
Gruß Daniel
Anzeige
Aber auch nur diese u.monodirektional (s.u.)! owT
18.11.2017 01:12:01
Luc:-?
:-?
Ging's um was anderes?
18.11.2017 02:03:46
Daniel
Nein!
Hier nicht, aber siehe Etos Einwurf! owT
19.11.2017 03:51:29
Luc:-?
:-?
Anzeige
Welchen konkret? owT
19.11.2017 17:08:58
Daniel
Besonders den letzten! owT
19.11.2017 17:44:36
Luc:-?
:-?
und der trifft nicht zu.
19.11.2017 18:11:54
Daniel
nun ja, dieser Einwurf trifft nur leider nicht zu.
Wenn man "3" durch "0011" ersetzen kann, dann kann man auch "0011" durch "3" ersetzen.
dh, die reine Textumwandlung funktioniert auch von Binär nach Hex.
Man muss hier nur vorher die Binärzahl in die passenden 4er-Blöcke teilen.
mit dem Oktalsystem funktioniert es genauso, nur hat man dann eben nicht 4, sondern nur 3 Binärstellen.
eine Umwandlung von Hex nach Dez oder umgekehrt war hier nicht gefragt.
Gruß Daniel
Anzeige
Ich hatte ihm darauf geantwortet u. die Blöcke ...
19.11.2017 18:36:33
Luc:-?
…für RückUmwandlung bereits erwähnt, Daniel;
allerdings geht das immer nur von Hex bzw OktBin und umgekehrt (Blöcke), nicht aber von bspw HexOkt. Diese String-Manipulationen sind also quasi nur eine (hier mögliche) Notlösung, keine echte Konvertierung. Das hatte Hansueli wohl (doch eher als 16×) vor allem gestört…
Luc :-?
Anzeige
und was war nochmal die Fragestellung der Eingangs
19.11.2017 18:44:42
Daniel
frage?
Gruß Daniel
Pfffh, geht's nun wieder von vorne los? Streite …
19.11.2017 20:24:32
vorne
…dich gefälligst mit Hansueli, ich hatte das nur erläutern wollen.
Meine eigene Meinung dazu steht weiter unten bzw ist dir bekannt, aber das würde hier tatsächlich erst lohnen, wenn der Frager nun aufeinmal noch mit allen möglichen, diesbzgl Wünschen käme…
Luc :-?
Anzeige
das kann ich tun, wenn er ,mir antwortet. owt
19.11.2017 20:40:34
Daniel
aber dann müsste er erklären, warum
19.11.2017 20:52:30
Daniel
er erst mich fragt, ob ich meine Lösung ernst meine, wenn er dann eine auf gleiche weise arbeitende Methode vorschlägt.
Dann wären es doch die 16x, aber später ...
20.11.2017 02:58:29
Luc:-?
…hatte er ja anders begründet! ;-]
Glaube übrigens kaum, dass er dir antworten wird, höchstens unten…
Luc :-?
Anzeige
Ich hab meine Verständnis-Grenze erreicht,
17.11.2017 15:20:04
EtoPHG
Basti,
Was genau willst du?
Woher hast du die HexToBin Function und v.a. was genau kann man mit den Parameter steuern?
Was machen die DecToBin und die HexToDec Funktionen?
Warum soll also ein HEX-String zuerst DEC umgewandelt werden, dann der DEC String in BIN und am Schluss soll wieder ein BIN String rauskommen? Sehr undurchsichtig und verwirrend.
Diese Funktion
Function HEXtoBIN(rCT As String, Optional iFillToLen As Integer) As String
Dim lx As Long
For lx = 1 To Len(rCT)
HEXtoBIN = HEXtoBIN & WorksheetFunction.HEX2BIN(Mid(rCT, lx, 1), 4)
Next lx
If Len(HEXtoBIN) 
wird ein HEX String beliebiger Länge in einen Binär-String beliebiger Länge umgewandelt. Mit dem Parameter iFillToLen kann man optional noch sagen, ob führende Nullen auf die verlangte Länge aufgefüllt werden sollen.
Die Funktion kann einfach als Formel in eine Zelle geschrieben werden.
Gruess Hansueli
Anzeige
AW: Ich hab meine Verständnis-Grenze erreicht,
17.11.2017 15:48:50
Basti
Hallo Hansueli,
der Code stammt von http://www.vbaexpress.com/forum/showthread.php?45350-Solved-Hex-to-Binary-conversion-not-using-HEX2BIN
Er wandelt, die unter in debug.print(410) enthaltene Zahl in Binär um. Ich habe in einer Spalte meiner Tabell Hex-Wert, die ich gerne markieren und durch ein Makro in Binär-Werte umwandeln möchte.
Gruß
Basti
Anzeige
AW: Ich hab meine Verständnis-Grenze erreicht,
17.11.2017 15:52:37
EtoPHG
Hallo Basti,
Und wo ist das Problem?
1. Warum ich die Hex2Bin Funktion nicht nutzen sollte ist mir nicht klar, aber Daniels Lösung würde diese auch nicht brauchen!
2a. Hilfsspalte mit der Funktion und Bezug auf deine Zellen/Spalte mit den Hexwerten
2b. Resultatwerte (binär) Kopieren und als Werte über die Hex-Spalte einfügen, fertig!
Gruess Hansueli
Anzeige
AW: Ich hab meine Verständnis-Grenze erreicht,
17.11.2017 16:18:55
Axel
Ich bedanke mich, hat super geklappt!
Grüße Heike
Das ist alles nicht so einfach, ...
17.11.2017 17:52:56
Luc:-?
…Basti,
wie es den Anschein zu haben scheint! Es ist nämlich zwischen 3-4 verschiedenen Möglichkeiten zu unterscheiden (hatte mich vor Jahren mal intensiver damit befasst):
1.0 Eine dezimale Ganzzahl ist ziffernweise hexadezimal codiert worden; dann könnte Daniels Methode angewendet wdn. (In der EDV auch ein durchaus übliches Verfahren)
2.0 Eine positive dezimale Ganzzahl ist komplett in eine hexadezimale Zahl gewandelt worden; dann könnte Hansuelis oder eine vglbare Methode angewendet wdn (gilt nicht für 3.!).
3.0 Eine beliebige dezimale Ganzzahl ist komplett in eine hexadezimale Zahl gewandelt worden, wobei ihr Vorzeichen integriert wurde →
3.1 Xl-Methode: Die Fkt DEZINHEX arbeitet vom dezimalen Äquivalent von 8000000000 (-549 755 813 888) bis zu dem von 7FFFFFFFFF (549 755 813 887), also auf Basis von 10 HexDezStellen. Das müsste hier berücksichtigt wdn! Aber
3.2 Vb-Methode: Die vbFkt Hex arbeitet mit nur 8 HexDezStellen, also von 80000000 (-2 147 483 648) bis 7FFFFFFF (2 147 483 647)!
• Falls also die 3.Methode zum Einsatz kommen soll und die HexZahl nicht mehr als max 10 Stellen hat, kann mit der Xl-Fkt in eine DezZahl gewandelt wdn. Allerdings lässt sich diese ggf nicht mit einer Xl-Fkt in eine Binärzahl wandeln, weil hierbei ebenfalls 10 BinärStellen Maximum sind!
• Falls die HexZahl aber mehr als 10 Stellen hat und folglich VBA zum Einsatz kommen muss, ist zu entscheiden, wie im Falle von negativen Zahlen, die ja eine vereinbarte MaximalLänge der Zahl benötigen, zu verfahren ist, zB 8er-, 4er- oder gar nur 2er-Schritte!
• Spielen negative Zahlen hingg keine Rolle, kann nach 2. oder evtl sogar 1. verfahren wdn.
Feedback nicht unerwünscht! Gruß, Luc :-?
„Die Intelligenzmenge ist auf diesem Planeten eine Konstante, die Bevölkerung nimmt aber zu!“ Auch deshalb informieren mit …
Anzeige
Ja, man kann es auch beliebig kompliziert
17.11.2017 21:11:08
EtoPHG
machen, Luc
Wenn schon denn schon, müsste man noch über endianness (little-, mixed- oder big-endian order) reden, nebst Deiner Erwähnung von positiv, negativ, über exponentielle (interne Speicherung) Darstellungen von Dezimalzahlen etc. etc.
M.E. gings hier um eine simple HEX-Binär Transformation ohne das ganze Speicher Brimborium. Darum mein etwas simplerer Vorschlag. Dieser ist übrigens mit einer fehlerhaften Angabe behaftet. Der Parameter iFillToLen füllt mit Nullen rechtsbündig und nicht mit führenden Nullen, was ja auch irgendwie überflüssig ist.
Typischerweise werden solche HEX/BINÄR Strings auch heute noch zur Darstellung von Belegungen (z.B. Fächer in einer Lagerebene, Tagesbelegungn in den Tagen eines Jahres, Markierungen in quadratischen Matrizen etc.) gebraucht. Mir erschien jedenfalls das VBA Gedöns im geposteten Code als völlig daneben und der Vorschlag von Daniel sind reine String Manipulationen, was dann z.B. bei der Umwandlung von dezimal zu hex, octal oder binär, in allen Kombination und Richtungen, irgendwie versagt.
Gruess Hansueli
Anzeige
Natürlich hast Du damit recht, ...
18.11.2017 01:09:16
Luc:-?
…Hansueli,
weshalb ich mich auch ausdrücklich auf ±Ganzzahlen beschränkt hatte. Das Ersetzen einer einfachen HexZiffernFolge durch eine binäre ist dagegen relativ einfach, nur sagt die nach Xl- oder VB-Standard nichts über positiv oder negativ aus, wenn ihre Stellen­zahl nicht bestimmten Regeln folgt und damit die Anzahl der Vornullen festgelegt wdn kann/muss. Alternativ könnte man natürlich davon ausgehen, dass alle Vornullen angegeben worden sind und damit auch die Anzahl der Vornullen der erzeugten Binärzahl festgelegt ist. Deshalb ist es hierbei ja auch kontraproduktiv, eine Dezimal­Umwand­lung einzuschieben, was ich unter 3. andeuten wollte.
Falls es tatsächlich nur um Signierung gehen sollte, zB die Monate eines Jahres, steht die Stellenzahl ja ohnehin fest und ± wäre irrelevant. Aber, obwohl darauf einiges hinzudeuten scheint, kann das ja nur der Fragesteller selbst wissen, der dann allerdings auch von selbst hätte auf die Lösung kommen können, denn er müsste ja wissen, was er wie signiert und dann hexadezimal zusam­men­gefasst hat (es sei denn, das war jemand anderes).
Falls Daniel das so gemeint hat, wie es geschrieben steht, ginge es nur so, wenn jede HexaZiffer durch eine vollständige 4stellige Bit-Folge ersetzt würde (ggf könnten die ganz linken Vornullen weggelassen wdn). Das geht dann aber nur für Hex→Bin oder Okt→Bin, quasi als Einbahnstraße*. Umgekehrt (unter der Voraussetzung, dass alle Stellen angegeben wurden bzw links fehlende Vornullen ergänzt wdn) wird's auf diese Weise schwierig; man muss dann von rechts nach links in 4er- bzw 3er-Gruppen portio­nieren.
Eine universelle und bidirektionale Konvertierung sähe natürlich anders aus und müsste im Sinne meines 3.Pkts geregelt sein.
* Mal als FmlBsp mit der unpublizierten UDF RepOpt:
=--RepOpt("substitute";16;1;{2.3};"3FF";VSplit("0123456789ABCDEF";""); HEXINBIN(VSplit("0123456789ABCDEF";"");4)) ⇒ 1111111111
=BININHEX(1111111111) ⇒ FFFFFFFFFF (mit den 2 fehlenden Vornullen ergäbe das #ZAHL!)
=RepOpt("substitute";16;1;{2.3};"001111111111";HEXINBIN(VSplit("0123456789ABCDEF";"");4); VSplit("0123456789ABCDEF";"")) ⇒ 3FF
In diesem simplen Fall klappt das auch umgekehrt, sonst wohl eher nur zufällig. Die Umwandlung der Hex- in eine Okt-Zahl auf diese Weise ergäbe ohnehin nur Blödsinn.

Gruß, Luc :-?
Anzeige
hier eine Variante
18.11.2017 08:12:55
Tino
Hallo,
teste mal die Variante.
Sub test()
Debug.Print HexToBin("410")
Debug.Print HexToBin("5423454f4545c4")
End Sub
Function HexToBin(ByVal HexNum As String) As String
Dim i%, tmpText$, intDec%
HexNum = UCase(HexNum)
For i = 1 To Len(HexNum)
intDec = Asc(Mid$(HexNum, i, 1))
Select Case intDec
Case 48 To 57: intDec = intDec - 48
Case 65 To 70: intDec = intDec - 55
Case Else: HexToBin = "Error": Exit Function
End Select
HexToBin = HexToBin & DecToBin(intDec, 4)
Next
Do While Left$(HexToBin, 1) = "0" And Len(HexToBin) > 0
HexToBin = Right$(HexToBin, Len(HexToBin) - 1)
Loop
End Function
Function DecToBin(iChr%, bitSys%)
Dim ii%, sTmp$
Do
ii = iChr Mod 2
sTmp = ii & sTmp
iChr = iChr \ 2
Loop Until iChr = 0
DecToBin = DecToBin & Format(sTmp, String(bitSys, "0"))
End Function
Gruß Tino
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Hexadezimal in Binär umwandeln in Excel


Schritt-für-Schritt-Anleitung

Um hexadezimale Werte in binäre Werte in Excel zu konvertieren, kannst Du VBA verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung, um dies zu erreichen:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeinDateiname)".
    • Wähle "Einfügen" > "Modul".
  3. Füge den folgenden Code ein:

    Function HexToBin(ByVal HexNum As String) As String
       Dim i As Integer, tmpText As String, intDec As Integer
       HexNum = UCase(HexNum)
       For i = 1 To Len(HexNum)
           intDec = Asc(Mid$(HexNum, i, 1))
           Select Case intDec
               Case 48 To 57: intDec = intDec - 48
               Case 65 To 70: intDec = intDec - 55
               Case Else: HexToBin = "Error": Exit Function
           End Select
           HexToBin = HexToBin & DecToBin(intDec, 4)
       Next
       Do While Left$(HexToBin, 1) = "0" And Len(HexToBin) > 0
           HexToBin = Right$(HexToBin, Len(HexToBin) - 1)
       Loop
    End Function
    
    Function DecToBin(iChr As Integer, bitSys As Integer) As String
       Dim ii As Integer, sTmp As String
       Do
           ii = iChr Mod 2
           sTmp = ii & sTmp
           iChr = iChr \ 2
       Loop Until iChr = 0
       DecToBin = DecToBin & Format(sTmp, String(bitSys, "0"))
    End Function
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Du kannst jetzt die Funktion HexToBin verwenden, um hexadezimale Werte in binäre Werte umzuwandeln. Beispiel: =HexToBin("1A").


Häufige Fehler und Lösungen

  • Fehler: "Error" bei ungültigen Hex-Zahlen:

    • Stelle sicher, dass die Eingabe nur gültige hexadezimale Zeichen enthält (0-9, A-F).
  • Probleme mit führenden Nullen:

    • Die Funktion entfernt führende Nullen. Falls Du diese benötigst, passe die Funktion an, um sie hinzuzufügen.

Alternative Methoden

Wenn Du keine VBA-Funktion verwenden möchtest, kannst Du die eingebaute Excel-Funktion HEX2BIN verwenden, um hexadezimale Werte in binäre Werte zu konvertieren.

=HEX2BIN("1A")

Diese Methode ist einfach und schnell, hat jedoch eine Begrenzung auf 10 Zeichen.


Praktische Beispiele

  1. Hexadezimal in Binär umwandeln:

    • Zelle A1: 1A
    • Zelle B1: =HexToBin(A1) → Ergebnis: 11010
  2. Verwendung von Excel-Funktionen:

    • Zelle A2: 2F
    • Zelle B2: =HEX2BIN(A2) → Ergebnis: 101111

Diese Beispiele zeigen, wie Du hexadezimale Werte effizient in binäre Werte umwandeln kannst.


Tipps für Profis

  • Verwendung von vba hex2bin in größeren Projekten:

    • Stelle sicher, dass Du Deine Funktionen gut dokumentierst, um Verwirrung mit bestehenden Excel-Funktionen zu vermeiden.
  • String-Manipulationen:

    • Du kannst die binären Werte weiterverarbeiten, um sie in andere Formate wie dezimal oder hex zu konvertieren. Überlege den Einsatz von vba hex to decimal, um die Flexibilität Deiner Funktionen zu erhöhen.

FAQ: Häufige Fragen

1. Kann ich die Funktion auch für negative hexadezimale Werte verwenden?
Ja, das funktioniert, solange die Eingabe korrekt ist. Achte darauf, wie negative Zahlen in deinem Kontext behandelt werden.

2. Gibt es eine Begrenzung der Eingabelänge für HEX2BIN?
Ja, die Funktion HEX2BIN hat eine maximale Eingabelänge von 10 Zeichen. Bei längeren Werten musst Du auf VBA zurückgreifen.

3. Wo finde ich weitere Informationen zu vba hex2bin?
Du kannst im Internet nach Tutorials und Beispielen suchen, die sich speziell mit der Umwandlung von hex in binär und umgekehrt beschäftigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige