5

仕様が見つからない古いファイル形式 (Cinema4D の古いバージョン) をリバース エンジニアリングしようとしています。

このファイル形式では、float 値が 4 バイトとして格納されていることがわかりましたが、通常の IEEE 形式ではないようです。これはエンディアンの問題ではありません。私は最近、hex<->float 変換ツールを使ってこれを理解するのに多くの時間を費やしました。

いくつかのサンプル値を次に示します。

0     = 00 00 00 00
1     = 80 00 00 41
2     = 80 00 00 42
4     = 80 00 00 43
8     = 80 00 00 44

0.25  = 80 00 00 3F
16384 = 80 00 00 4F

上記の 2 行からの私の観察では、3F から 4F に移動するときに、何かがここでラップしているように見えます。

1.5  = C0 00 00 41
2.5  = A0 00 00 42

-1   = 80 00 00 C1
-1.5 = C0 00 00 C1
-2   = 80 00 00 C2
-3   = C0 00 00 C2

だから、ここにいくつかの観察があります:

  1. 最後のバイトを +1 増やすと、値が 2 倍になります
  2. 最後のバイトの上位ビットが設定されている場合、数値は負です
  3. 最初のバイトは、整数以外の値で何かを行います

明らかなパターンがいくつかあり、指数/仮数が進行していますが、これを理解することはできませんでした。たぶん、明らかな何かが欠けていて、それは通常の IEEE ですか? 仮数/指数などのビット数を把握することは問題ではありません (上記の例では、中間の 2 バイトがゼロです)。まず、浮動小数点値を取得するための式を把握する必要があります。

4

1 に答える 1