带小数的10进制如何转为16进制,谢谢。(100分)

  • 主题发起人 主题发起人 jxgxy
  • 开始时间 开始时间
J

jxgxy

Unregistered / Unconfirmed
GUEST, unregistred user!
比如 1.7000 2.000 300.0000 转换成16进制是多少?

急盼代码。。。
 
参考
http://stephensuen.spaces.live.com/Blog/cns!1p1G_DGhjYiYGmj6keNZQAcw!172.entry

procedure TForm32.Button1Click(Sender: TObject);
var
s : string;

f : Single; //单精度
d : Double; //双精度

p : Pointer;
begin
f := 1.7;
p := @f;
s := IntToHex(PInteger(p)^, 4);
Memo1.Lines.Add(s);

d := 1.7;
p := @d;
s := IntToHex(PInt64(p)^, 8);
Memo1.Lines.Add(s);
end;
 
To:tseug

那么反过来 16进制转为带小数的10进制如何写呢,急盼代码,谢谢....
 
参考这里http://hi.baidu.com/cloudinsky88/blog/item/123260d8077f403633fa1c1a.html

在通讯中经常用到的,关注哦

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)]+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;

----------

Sample:

Edit1.text:='40A33964' ; //注意:浮点数为四字节,高位在前低位在后

edit2.text:= format('%1.3f',[HextoFloat(Edit1.text)]) ; //输出为5.101
 
接受答案了.
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
913
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部