Delphi 进制转换——十六进制 to 十进制浮点数 - JonyOang

Delphi 进制转换——十六进制 to 十进制浮点数

//十进制 to 二进制

function IntToBin(Value: LongInt;Size: Integer): String;

var

i: Integer;

begin

Result:=\'\';

for i:=Size-1 downto 0 do begin

if Value and (1 shl i)<>0 then begin

Result:=Result+\'1\';

end else begin

Result:=Result+\'0\';

end;

end;

end;

//二进制 to 十进制

function BintoInt(Value: String): LongInt;

var

i,Size: Integer;

begin

Result:=0;

Size:=Length(Value);

for i:=Size downto 1 do

begin

if Copy(Value,i,1)=\'1\' then

Result:=Result+(1 shl (Size-i));

end;

end;

function floatBintoInt(Value: String): real;

var

i,Size: Integer;

begin

Result:=0;

Size:=Length(Value);

for i:=Size downto 1 do

begin

if Copy(Value,i,1)=\'1\' then

Result:=Result+1/(1 shl i);

end;

end;

//十六进制 to 二进制

function HextoBinary(Hex:string):string;

const

BOX: array [0..15] of string =

(\'0000\',\'0001\',\'0010\',\'0011\',

\'0100\',\'0101\',\'0110\',\'0111\',

\'1000\',\'1001\',\'1010\',\'1011\',

\'1100\',\'1101\',\'1110\',\'1111\');

var

i:integer;

begin

for i:=Length(Hex) downto 1 do

Result:=BOX[StrToInt(\'$\'+Hex[i])]+Result;

end;

//十六进制 to 十进制 浮点型

function HextoFloat(s:string):real;

var b,temp:string;

e:integer;

f:real;

begin

b:=HextoBinary(s);

temp := copy(b,2,8);

e:=BintoInt(temp)-127;

temp := copy(b,10,23);

f := 1+floatBintoInt(temp);

if(copy(b,1,1)=\'0\')then

result := power(2,e)*f

else

result :=-power(2,e)*f;

end;