16进制的双精度浮点数的转换问题

ydyuse 2007-08-03 03:49:26
请问怎样将16进制数转换为双精度浮点数?
例如:C0 66 F4 00 00 00 00 00 转换为双精度浮点数应为多少?
一个8字节的双精度浮点数转换成16进制又如何?
...全文
1094 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ydyuse 2007-08-06
  • 打赏
  • 举报
回复
虽然结果不对,但我自己已经找到函数,还是把分给了
jadeluo 2007-08-04
  • 打赏
  • 举报
回复
function DoubleToHex(Value: Double): String;
var
bArray : array[0..7] of Byte;
iLoop : Integer;
begin
CopyMemory(@bArray[0], @Value, 8);
Result := '';
for iLoop := 0 to 7 do
Result := Result + IntToHex(bArray[iLoop], 2) + ' ';
Result := Trim(Result);;
end;

function HexToDouble(Hex: String): Double;
var
iLoop : Integer;
bArray : array[0..7] of Byte;
begin
for iLoop := 0 to 7 do
bArray[iLoop] := StrToInt('$' + Copy(Hex, iLoop * 3 + 1, 2));
CopyMemory(@Result, @bArray[0], 8);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
dValue : Double;
begin
ShowMessage (DoubleToHex(7384.36));
dValue := HexToDouble('C0 66 F4 00 00 00 00 00');
ShowMessage (FloatToStr(dValue));
end;
ydyuse 2007-08-03
  • 打赏
  • 举报
回复
谢谢,原理我懂,我要转换函数
天行归来 2007-08-03
  • 打赏
  • 举报
回复
转自GOOGLE搜索>>>

对于大小为32-bit的浮点数(32-bit为单精度,64-bit浮点数为双精度,80-bit为扩展精度浮点数),
1、其第31 bit为符号位,为0则表示正数,反之为复数,其读数值用s表示;
2、第30~23 bit为幂数,其读数值用e表示;
3、第22~0 bit共23 bit作为系数,视为二进制纯小数,假定该小数的十进制值为x;

则按照规定,该浮点数的值用十进制表示为:
= (-1)^s * (1 + x) * 2^(e - 127)

对于49E48E68来说,
1、其第31 bit为0,即s = 0
2、第30~23 bit依次为100 1001 1,读成十进制就是147,即e = 147。
3、第22~0 bit依次为110 0100 1000 1110 0110 1000,也就是二进制的纯小数0.110 0100 1000 1110 0110 1000,其十进制形式为0.78559589385986328125,即x = 0.78559589385986328125。

这样,该浮点数的十进制表示
= (-1)^s * (1 + x) * 2^(e - 127)
= (-1)^0 * (1+ 0.78559589385986328125) * 2^(147-127)
= 1872333
ydyuse 2007-08-03
  • 打赏
  • 举报
回复
一个双精度浮点数7384.36又如何转换成8字节的16进制?

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧