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;
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;
请发表评论