7,763
社区成员
发帖
与我相关
我的任务
分享
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Sub Form_Load()
Dim InA As Single
'调用示例
InA = 5.8868464408377E-39
Debug.Print InA, Dec2Hex(InA), Hex2Dec(Dec2Hex(InA))
InA = -5.8868464408377E-39
Debug.Print InA, Dec2Hex(InA), Hex2Dec(Dec2Hex(InA))
End Sub
'转换为十六进制
Public Function Dec2Hex(InputNumber As Single) As String
Dim Tran() As Byte
Dim I As Integer
ReDim Tran(LenB(InputNumber) - 1)
CopyMemory Tran(0), InputNumber, LenB(InputNumber)
For I = LBound(Tran) To UBound(Tran)
Dec2Hex = Right("00" & Hex(Tran(I)), 2) & Dec2Hex
Next
End Function
'转换为单精度浮点数
Public Function Hex2Dec(InputHex As String) As Single
Dim Tran() As Byte
Dim I As Integer
ReDim Tran(LenB(InputHex) / 4 - 1)
For I = LBound(Tran) To UBound(Tran)
Tran(I) = Val("&H" & (Mid(InputHex, (UBound(Tran) - I) * 2 + 1, 2)))
Next
CopyMemory Hex2Dec, Tran(0), UBound(Tran) + 1
End Function
Public Function StrToSng(ByVal Data As String) As Single
Dim I As Integer, C As Integer, R() As Byte
On Error GoTo hErr
StrToSng = 0
C = LenB(StrToSng) - 1
ReDim R(C)
For I = 0 To C
R(C - I) = CByte("&H" & Mid(Data, I * 2 + 1, 2))
Next
CopyMemory StrToSng, R(0), LenB(StrToSng)
hErr:
End Function
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Function SngToStr(ByVal F As Single) As String
Dim Data() As Byte, I As Integer, C As Integer, CH As String
On Error GoTo hErr
SngToStr = ""
C = LenB(F) - 1
ReDim Data(C)
CopyMemory Data(0), F, LenB(F)
For I = 0 To C
CH = Hex(Data(I))
If Len(CH) = 1 Then CH = "0" & CH
SngToStr = CH & SngToStr
Next
hErr:
End Function