16进制的双精度浮点数的转换问题 请问怎样将16进制数转换为双精度浮点数? 例如:C0 66 F4 00 00 00 00 00 转换为双精度浮点数应为多少? 一个8字节的双精度浮点数转换成16进制又如何? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 转自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 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; 高分求解 关于 idTcpClient 传文件的问题. 在dbgrid添加多个汇总行 读入jpg或gif或bmp,转换成2色bmp,改如何做? 用ADO控件连接SQL2000问题?希各位大侠看看~急~~~~ 怎样获取sql数据服务器名的列表? 大侠帮忙,简单问题! 见鬼了……奇怪的问题!!!! 真是奇怪得很!谁能告诉我为什么?????高手请进!!!! 莫名其妙! 请指点!真的很难呀!分数可以随便要700分以内的。谁要多少分可以注名。 哪有有好的编程图标下载 真是服了DELPHI了,谁能解决这个问题,不知道是不是SQL的问题,我折腾了两天了!
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
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;