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, Lng As MyLong, 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, Lng As MyLong, 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, 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, Dbl As MyDouble, 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