Posted to microsoft.public.excel.programming
|
|
faster way to convert hex to ieee754?
Probalby easier (and more intuitive to just pass in the Hex value since that
is what the function claims to do)
Type MyHex
Lng As Long
End Type
Type MySingle
sng As Single
End Type
Function Hex2Ieee754(i As Long)
Dim h As MyHex
Dim s As MySingle
h.Lng = i
LSet s = h
Hex2Ieee754 = s.sng
End Function
Sub Test()
Debug.Print Hex2Ieee754(&H40B80000)
End Sub
--
Regards,
Tom Ogilvy
"Dana DeLouis" wrote:
bytArray(3) = "&H" + b1
Don't know if it's faster, but maybe you can generate the string "&H" once,
and instead of adding two strings, use "&" instead.
Function Hex2Ieee754(b1, b2, b3, b4) As Single
Dim bytArray(0 To 3) As Byte
Const h As String = "&H"
bytArray(3) = h & b1
bytArray(2) = h & b2
bytArray(1) = h & b3
bytArray(0) = h & b4
CopyMemory Hex2Ieee754, bytArray(0), 4
End Function
Sub TestIt()
'// Both return 5.75
Debug.Print Hex2Ieee754("40", "B8", "00", "00")
Debug.Print Hex2Ieee754(40, "B8", 0, 0)
End Sub
--
HTH. :)
Dana DeLouis
Windows XP, Office 2003
"Mark HOlcomb" wrote in message
...
I am converting Hex to ieee754 floating point numbers using the following
attached code using VBA. Is this a 'fast' way to do this operation? My
code
spends 90% of the time performing this operation. I'm hoping there is a
faster way. Any comments are apprectiate.
Thanks!
Mark
'To type cast in VB you need to use the API to copy the contents of one
data
type into another....
'turns hex data into floating point ieee754 standard
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory"
(Destination As Any, Source As Any, ByVal Length As Long)
Function Hex2Ieee754(b1, b2, b3, b4)
Dim bytArray(0 To 3) As Byte
Dim fResult As Single
' load your data (40 B8 00 00) into a byte array creates 5.75
' note the order is reversed
bytArray(3) = "&H" + b1
bytArray(2) = "&H" + b2
bytArray(1) = "&H" + b3
bytArray(0) = "&H" + b4
' copy into the float
CopyMemory fResult, bytArray(0), 4
' print the result (5.75)
'Debug.Print fResult
Hex2Ieee754 = fResult
End Function
|