Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

single Gleitkommazahl in 4 Byte Hex umwandeln

Forumthread: single Gleitkommazahl in 4 Byte Hex umwandeln

single Gleitkommazahl in 4 Byte Hex umwandeln
06.02.2006 18:26:45
Heiko
Hallo,
habe noch immer ein recht kniffliges Problem: Es geht um die Umwandlung einer (IEEE754) Gleitkommazahl (Single) in 4 Byte Hex Code bzw. die entsprechenden 4 einzelnen Ascii Werte per VBA. Offensichtlich gibt es in Excel keine fertige Funktion hierfür bzw. nur "abgespeckte" Tabellenfunktionen. Bisher habe ich es hinbekommen, die einzelnen Werte für Vorzeichen, Mantisse und Exponent zu berechnen und dies dann in Form von Bits darzustellen. Anschließend habe ich die 32 Bit-Kette in 4 mal 8 Bits zerhackt und daraus wiederum dann die einzelnen Hex-Werte berechnet.
Es funktioniert zwar, ist aber irgendwie nicht richtig "elegant". Kennt jemand eine einfachere Methode bzw. einen richtigen Algorithmus?
Danke im voraus,
Heiko
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: single Gleitkommazahl in 4 Byte Hex umwandeln
07.02.2006 21:16:58
bst
Abend Heiko,
vermutlich geht's elegant nur durch Umkopieren des Single's in ein Bytearray.
Dazu brauchst Du API und die in VBA undokumentierte VarPtr-Funktion.
Alternativ könnte es auch gehen (ungetestet!) den Single in eine Binärdatei zu schreiben und in ein Byte-Array zurückzulesen.
Übrigens, wie hast Du das denn gemacht ??
HTH, Bernd
--
Option Explicit
Private Declare

Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
Dest As Any, Src As Any, ByVal ByteLen As Long)
Type tGKZ
vorzeichen As Byte
exponent As Integer
mantisse As Long
End Type

Function ByteArr2GKZ(b() As Byte, gkz As tGKZ) As Boolean
gkz.vorzeichen = IIf((b(3) And 128) = 0, 0, 1)
gkz.exponent = CInt((b(3) And 127)) * 2 + IIf((b(2) And 128) = 0, 0, 1)
gkz.mantisse = (CLng(b(2)) And 127) * 256 * 256 + CLng(b(1)) * 256 + CLng(b(0))
ByteArr2GKZ = True
End Function


Sub x()
Dim s As Single, b(0 To 3) As Byte, gkz As tGKZ
s = 13.5
CopyMemory ByVal VarPtr(b(0)), ByVal VarPtr(s), 4
Debug.Print b(3), b(2), b(1), b(0)
Call ByteArr2GKZ(b, gkz)
Debug.Print gkz.vorzeichen, gkz.exponent, gkz.mantisse
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Single Gleitkommazahl in 4 Byte Hex umwandeln


Schritt-für-Schritt-Anleitung

Um eine Single Gleitkommazahl in 4 Byte Hex umzuwandeln, kannst Du die folgende VBA-Methode verwenden. Diese Methode nutzt die CopyMemory API, um die Gleitkommazahl direkt in ein Byte-Array zu kopieren.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu, indem Du mit der rechten Maustaste auf "VBAProject" klickst und "Einfügen" > "Modul" wählst.
  3. Kopiere den folgenden Code in das Modul:
Option Explicit
Private Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
Dest As Any, Src As Any, ByVal ByteLen As Long)

Type tGKZ
    vorzeichen As Byte
    exponent As Integer
    mantisse As Long
End Type

Function ByteArr2GKZ(b() As Byte, gkz As tGKZ) As Boolean
    gkz.vorzeichen = IIf((b(3) And 128) = 0, 0, 1)
    gkz.exponent = CInt((b(3) And 127)) * 2 + IIf((b(2) And 128) = 0, 0, 1)
    gkz.mantisse = (CLng(b(2)) And 127) * 256 * 256 + CLng(b(1)) * 256 + CLng(b(0))
    ByteArr2GKZ = True
End Function

Sub ConvertToHex()
    Dim s As Single, b(0 To 3) As Byte, gkz As tGKZ
    s = 13.5 ' Beispielwert
    CopyMemory ByVal VarPtr(b(0)), ByVal VarPtr(s), 4
    Debug.Print Hex(b(3)), Hex(b(2)), Hex(b(1)), Hex(b(0)) ' Ausgabe in 4 Byte Hex
    Call ByteArr2GKZ(b, gkz)
    Debug.Print gkz.vorzeichen, gkz.exponent, gkz.mantisse
End Sub
  1. Führe die ConvertToHex Sub aus, um die Umwandlung durchzuführen. Die Ausgabe wird in der Konsole angezeigt.

Häufige Fehler und Lösungen

  • Fehler: "Typ nicht definiert"

    • Stelle sicher, dass Du die richtige Deklaration für CopyMemory verwendest. Achte darauf, dass Du PtrSafe verwendest, wenn Du Excel 64-Bit nutzt.
  • Fehler: Unerwartete Ergebnisse bei der Umwandlung

    • Überprüfe, dass die Gleitkommazahl korrekt in das Byte-Array kopiert wurde. Achte darauf, dass die Reihenfolge der Bytes beim Debugging angezeigt wird.

Alternative Methoden

Es gibt auch andere Ansätze, um eine Gleitkommazahl in 4 Byte Hex umzuwandeln:

  1. Binärdatei-Methode: Schreibe die Gleitkommazahl in eine Binärdatei und lese sie anschließend in ein Byte-Array zurück. Dies kann nützlich sein, wenn Du mit großen Datenmengen arbeitest.

  2. Excel-Tabellenfunktionen: Obwohl Excel keine direkte Funktion für diese Umwandlung bietet, kannst Du die einzelnen Bits manuell berechnen und in ein Hex-Format konvertieren.


Praktische Beispiele

Hier sind einige Beispiele, wie Du die Umwandlung in verschiedenen Kontexten nutzen kannst:

  • Um die Gleitkommazahl 10.75 in 4 Byte Hex zu konvertieren, ändere einfach den Wert von s in der ConvertToHex Sub:
s = 10.75
  • Um die Ausgabe in ASCII zu konvertieren, kannst Du die Hex-Werte weiterverarbeiten, um die entsprechenden ASCII-Zeichen zu erhalten.

Tipps für Profis

  • Nutze Debug.Print für die Ausgabe, um die Ergebnisse während der Entwicklung schnell zu überprüfen.
  • Dokumentiere Deinen Code sorgfältig, besonders wenn Du mit API-Funktionen arbeitest, um zukünftige Fehler zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich die Ausgabe in ein Excel-Blatt schreiben? Du kannst die Werte in Zellen schreiben, indem Du Cells(row, column).Value = value verwendest.

2. Funktioniert dieser Code in Excel 365? Ja, der Code ist sowohl für Excel 32-Bit als auch 64-Bit geeignet, wenn Du die PtrSafe-Deklaration verwendest.

3. Gibt es eine Möglichkeit, die Umwandlung ohne VBA durchzuführen? Direkte Umwandlungen ohne VBA sind in Excel nicht möglich, da Excel keine integrierte Funktion für die Umwandlung von Gleitkommazahlen in Hex-Werte bietet.

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