Delphi конвертировать бинарный файл Microsoft в ieee (8 бит) - PullRequest
0 голосов
/ 06 декабря 2011

У кого-нибудь есть код для преобразования из старого 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 / Программирование / Языки / Pascal / Delphi / Q_20245266.html )

Спасибо!

1 Ответ

0 голосов
/ 07 декабря 2011

После работы с ним преобразование двойных чисел оказалось не так просто, как синглов ... (показатели и числа не совпадают).

Даже код C в ссылке не работает в некоторых случаях (возможно, потому, что он был разработан для 16-битного компилятора? Я не знаю, не успел полностью протестировать) ..! *

Я сталкивался с этой библиотекой asm (она говорит, что она бесплатна), которая решила проблему (приходится импортировать ее как C dlls):

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

Удачи для следующего после этого,

...