Bonjour ,

J'avais dans une précédante discussion demandé la conversion d'un float vers un hexa selon la norme IEEE754 .Donc voici le code (Merci à Pierre Fauconnier ) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
Function EntierVersBinaire(ByVal Nombre As Long) As String
    ' Convertit un nombre entier en binaire
 
    Dim Exposant As Integer
    Dim Chaine As String
    Dim i As Integer
 
    'Calcul de l'exposant pour éviter les 0 non significatifs à gauche
    i = 0
    Do While Nombre >= 2 ^ i
        i = i + 1
    Loop
    i = i - 1
 
    For Exposant = i To 0 Step -1
        If Nombre >= 2 ^ Exposant Then
            Chaine = Chaine & "1"
            Nombre = Nombre - 2 ^ Exposant
            Else
            Chaine = Chaine & "0"
        End If
    Next
 
    EntierVersBinaire = Chaine
End Function
 
 
Function DecimalVersBinaire(ByVal Nombre As Double) As String
    'Renvoie l'expression binaire d'un nombre décimal
    'Le nombre passé en paramètre doit être tel que 0 <= nombre < 1
 
 
    Dim Somme As Double
    Dim Nombre1 As Double
    Dim i As Integer
    Dim Chaine As String
 
    Nombre1 = Nombre
    For i = 1 To 23
        If Nombre > 2 ^ (-i) Then
            Chaine = Chaine & "1"
            Nombre = Nombre - 2 ^ (-i)
            Else
            Chaine = Chaine & "0"
        End If
    Next
    DecimalVersBinaire = Chaine
End Function
 
 
 
Function B2H(NombreBin As String)
    ' Convertit un nombre binaire en nombre hexadécimal
 
    Dim ChaineBinaire As String
    Dim ChaineHexa As String
    Dim ChaineTemp As String
    Dim i As Integer
    Dim ChaineRetour As String
    Dim Position As Integer
    Dim Reste As Integer
 
 
 
    ChaineBinaire = "0000000100100011010001010110011110001001101010111100110111101111"
    ChaineHexa = "0123456789ABCDEF"
 
    Reste = Len(NombreBin) Mod 4
    If Reste <> 0 Then NombreBin = String(4 - Reste, "0") & NombreBin
    For i = Len(NombreBin) To 1 Step -4
        ChaineTemp = Mid(NombreBin, i - 3, 4)
        Position = (8 * Mid(ChaineTemp, 1, 1)) + (4 * Mid(ChaineTemp, 2, 1)) + _
            (2 * Mid(ChaineTemp, 3, 1)) + (Mid(ChaineTemp, 4, 1))
        ChaineRetour = Mid(ChaineHexa, Position + 1, 1) & ChaineRetour
    Next i
    B2H = ChaineRetour
End Function
 
Function DecimalVersFloatHexa(ByVal Nombre As Single) As String
    ' Selon la nomre IEEE 754 fonction principale !
 
    Dim i As Integer
    Dim Exposant As Integer
    Dim TropGrand As Boolean
    Dim Chaine As String
    Dim Multiplicande As Single
 
 
 
    ' "Calcul du signe
    If Nombre < 0 Then
        Chaine = 1
        Else
        Chaine = 0
    End If
 
    ' Recherche de l'exposant
        Do While Abs(Nombre) > 2 ^ i
        i = i + 1
    Loop
    i = i - 1
 
    'conversion de l'exposant
    Exposant = 127 + i
    If i > 255 Then TropGrand = True
 
    If Not TropGrand Then
        Chaine = Chaine & EntierVersBinaire(Exposant)
 
        'Calcul du multiplicande
        Multiplicande = Abs(Nombre) / 2 ^ i
        Multiplicande = Multiplicande - 1
        Chaine = Chaine & DecimalVersBinaire(Multiplicande)
        Chaine = B2H(Chaine)
        DecimalVersFloatHexa = Chaine
    End If
End Function
Aujourd'hui mon problème est inverse je veux convertir un hexa en float
Voila ,si vous pouvez m'aider ce serait trés sympa
Merci