delphi将microsoft二进制转换为ieee(8bits)

时间:2011-12-06 17:54:20

标签: delphi ieee-754

有人有从旧MSB转换为ieee(delphi real)的代码吗?

在Google中,我只创建了4位转换,但不是8位:

function MBF2IEEE(MBFVal: Single): Single;
var
   Output: array[1..4] of byte;
   Value: Single absolute Output;
//   Sign: byte;
   LSB: Byte;
begin
   try
      Output[4] := TInput(MBFVal)[4];
      { if value is non-zero, do some bit shuffling }
      if Output[4] > 2 then begin
         Output[3] := TInput(MBFVal)[3];
         Output[2] := TInput(MBFVal)[2];
         Output[1] := TInput(MBFVal)[1];
         Output[4] := Output[4] - $02;
         LSB := Output[4] and $01;
         Output[4] := (Output[4] shr 1) or (Output[3] and $80);
         if LSB = 0 then
            Output[3] := Output[3] and $7f
         else
            Output[3] := Output[3] or $80;
      { else return 0 }
      end else begin
         Output[1] := 0;
         Output[2] := 0;
         Output[3] := 0;
         Output[4] := 0;
      end;
      Result := Value;
   except
      Output[1] := 0;
      Output[2] := 0;
      Output[3] := 0;
      Output[4] := 0;
   end;
end;

(来自此页面 http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_20245266.html

谢谢!

1 个答案:

答案 0 :(得分:0)

使用它之后,转换双打并不像单身那么容易..(指数和螳螂不匹配)。

即使链接中的C代码在某些情况下也不能正常工作(可能是因为它是为16位编译器设计的?我不知道,还没有时间进行全面测试)..!

我遇到过这个解决问题的asm库(它说它是免费的)(必须像C dlls一样导入它):

http://www.microdexterity.com/demos/mbfiee32.zip

此后的下一个好运,