VBA Tipp: Gleitkommazahlen in Hexadezimaldarstellung

Aus DBWiki
Wechseln zu: Navigation, Suche

Problem

Ich möchte Gleitkommazahlen als Hexadezimalzahlen darstellen (also die binäre Repräsentation der Gleitkommazahl hexadezimal dargestellt bekommen).

Lösung

Das geht mit den folgenden Umwandlungsroutinen:

Private Type MyLong
   L1 As Long
   L2 As Long
End Type
 
Private Type MySingle
   S As Single
End Type
 
Private Type MyDouble
   D As Double
End Type
 
Public Function SngToHex(S As Single) As String
   Dim L   As Long
   Dim Lng As MyLong
   Dim Sng As MySingle
 
   Sng.S = S
   LSet Lng = Sng
   SngToHex = Right$("00000000" & Hex$(Lng.L1), 8)
End Function
 
Public Function DblToHex(D As Double) As String
   Dim L   As Long
   Dim Lng As MyLong
   Dim Dbl As MyDouble
 
   Dbl.D = D
   LSet Lng = Dbl
   DblToHex = Right$("00000000" & Hex$(Lng.L2), 8) & Right$("00000000" & Hex$(Lng.L1), 8)
End Function

Die umgekehrte Wandlung geht folgendermaßen:

Public Function HexToSng(S As String) As Single
   Dim Lng As MyLong
   Dim Sng As MySingle
 
   Lng.L1 = CLng("&H0" & S)
   LSet Sng = Lng
   HexToSng = Sng.S
End Function
 
Public Function HexToDbl(S As String) As Double
   Dim Lng As MyLong
   Dim Dbl As MyDouble
   Dim Tmp As String
 
   Tmp = Right$(String(16, "0") & S, 16)
   Lng.L1 = CLng("&H0" & Right$(Tmp, 8))
   Lng.L2 = CLng("&H0" & Left$(Tmp, 8))
   LSet Dbl = Lng
   HexToDbl = Dbl.D
End Function