2011-12-06 2 views
-1

誰かが古いMSBからieee(delphi real)に変換するコードを持っていますか?delphiはmicrosoftバイナリをieee(8ビット)に変換します

はグーグルでは、私だけではなく、8ビットのため、4ビット変換を設立しました:

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から)!

+0

この8バイトのMSB形式を文書化するリンクはありますか? –

+0

確かに、私はまだ誰かがDelphiでこれをやったと信じています。 http://support.microsoft.com/kb/35826 http://www.elchabon.com/2010/07/mbfmicrosoft-binary-フォーマット間の変換/ http://stackoverflow.com/questions/3766023/convert-mbf-double-to-ieee –

+0

私は残りの人がMSBとは何かを追うことができるようにリンクを求めました。私は誰かが変換を行うコードを一緒にノックすることができますいくつかの良い参照と私は確信しています。 –

答えて

0

これで作業した後、ダブルスの変換は、シングルのように簡単ではありませんでした(指数とマントは一致しません)。

リンクのCコードでもうまく動作しない場合があります(16ビットコンパイラ用に設計されたものなのでしょうか?わかりませんが、完全にテストする時間はありません)。

私は(C DLLのようにそれをインポートする必要が)問題を解決し、このASMライブラリ(それはのその自由を言う)に遭遇しました

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

この後、次のいずれかの幸運を、

関連する問題