Bonjour,
Merci à tous pour vos réponses et vos contributions.
Désolé de ma réponse tardive, je n'avais malheureusement pas eu le temps de me replonger dedans.
Néanmoins ce matin, j'ai finalement réussi à convertir un hexa de 64 bits en double.
Voilà comment j'ai fait :
J'ai converti mon hexa en binaire, et ensuite j'ai décodé en fonction de l'exposant et du mantisse.
Voici mon code :
Function HEX2DOUBLE(strHex As String) As Double
Dim strBin As String
Dim result As Double
strBin = HEX2BIN(strHex)
result = BIN2DOUBLE(strBin)
HEX2DOUBLE = result
End Function
Function BIN2DOUBLE(strBin As String) As Double
Dim signe As Integer
Dim exponent As Integer
Dim i As Integer
Dim result As Double
If Left(strBin, 1) = 0 Then
signe = 1
Else
signe = -1
End If
exponent = BIN2DEC(Mid(strBin, 2, 11)) - 1023
strBin = Mid(strBin, 13, Len(strBin) - 12)
strBin = "1" & strBin
If exponent >= 1 Then
For i = 0 To Len(strBin)
If Mid(strBin, i + 1, 1) = 1 Then
result = result + 2 ^ (exponent - i)
End If
Next
Else
For i = 0 To exponent * -1
strBin = "0" & strBin
Next
For i = 0 To Len(strBin)
If Mid(strBin, i, 1) = 1 Then
result = result + 2 ^ (0 - i)
End If
Next
End If
BIN2DOUBLE = result * signe
End Function
Public Function HEX2BIN(strHex As String) As String
Dim c As Long, i As Long, b As String * 4, j As Long
For c = 1 To Len(strHex)
b = "0000"
j = 0
i = Val("&H" & Mid$(strHex, c, 1))
While i > 0
Mid$(b, 4 - j, 1) = i Mod 2
i = i \ 2
j = j + 1
Wend
HEX2BIN = HEX2BIN & b
Next
HEX2BIN = RTrim$(HEX2BIN)
End Function
Function BIN2DEC(sMyBin As String) As Long
Dim x As Integer
Dim iLen As Integer
iLen = Len(sMyBin) - 1
For x = 0 To iLen
BIN2DEC = BIN2DEC + _
Mid(sMyBin, iLen - x + 1, 1) * 2 ^ x
Next
End Function
Il y avait surement plus rapide et plus facile, mais cela fonctionne très bien pour moi, et est assez rapide à s'exécuter.
Encore merci pour vos réponses.
Cordialement,
Zapsalis