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 |
Partager