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
|
function BinToDec (Bin : String) : Integer;
Var
i, L : Integer;
Begin
Result := 0;
L := Length(Bin);
for i := 1 to L do
if Bin[i] = '1' then Result := Result + (1 shl (L - i));
BinToDec := Result;
End;
function Int_To_BinString(AInteger:cardinal):string;
var
s : string;
bit_num : integer;
bit_value : cardinal;
begin
//initialisations
s:='';
bit_value:=1;
bit_value:=bit_value shl 31; //équivalent à bit_value:=2 puissance 32;
//calcul
for bit_num:=32 downto 1 do
begin
if (bit_value and AInteger)=bit_value then
begin
s:=s+'1';
end else
begin
if s<>'' then s:=s+'0';//comme ça, ca n'écrit pas les zéro du début, donc la ligne est en option
end;
bit_value:=bit_value shr 1; //pareil que bit_value:=bit_value div 2;
end;
result:=s;
end;
function Power2 (a : Real; n : Integer) : Real;
Begin
if a = 0.0 then
begin
if n = 0
then Power2 := 1.0
else Power2 := 0.0
end else
if a > 0
then Power2 := Exp(n * Ln(a))
else begin
if Odd(n)
then Power2 := -Exp(n * Ln(-a))
else Power2 := Exp(n * Ln(-a));
end;
end;
function EntierHexaToReel(CetEntier : Int64) : Single;
var
TempTotal, Temp : String;
i : Byte;
MonReel, Exposant , Fractionnaire : variant;
begin
monReel:=0;
//Conversion de l'Entier en Bianire
TempTotal:=Int_To_BinString(CetEntier);
//Ajout de 0 pour obtenir une trame à 32 caractères
if length(TempTotal)<32 then
begin
repeat
TempTotal:='0'+TempTotal;
until length(TempTotal)=32;
end;
//Calcul de l'Exposant
Temp:=copy(TempTotal,2,8);
Exposant:=BinToDec(Temp);
MonReel:=Power2(2,Exposant-127);
//Calcul du Signe
if TempTotal[1]='1' then MonReel:=-MonReel;
//Calcul de la partie Fractionnaire
Temp:=copy(TempTotal,10,23);
Fractionnaire:=0;
for i:=1 to 23 do
begin
Fractionnaire:=Fractionnaire+StrToInt(Temp[i])*power2(2,-i);
end;
Fractionnaire:=1+Fractionnaire;
EntierHexaToReel:=monReel*Fractionnaire;
end; |
Partager