2

Infinity Engine(Baldur's Gateなどのゲームで使用されているもの)のファイル形式の内部を調べ、ファイル構造を調べて、エンジンファイルを16進形式で保存する理由を尋ねました(これは次のようにも呼ばれていると思います)プレーンテキストの代わりに「バイナリ形式」)?

私はいくつかの仮説を持っています(「あなたの答えは質問と一緒に提供されるのを避け、あなたはより多くの答えを期待する」というスタックオーバーフロールールとは異なります):

  1. ファイルの知的特性を保持しようとする(役に立たない)。
  2. スペースを節約するために、一部のファイルは非常に大きくなる可能性があり、当時(1990年代の終わり)にはスペースは今ほど大きくありませんでした。
  3. 構造化されたデータを持つため(これは、フラットファイルで固定長のタブを使用することでも実現できます)。
4

2 に答える 2

3

16進数はバイナリではありません。

16進数では、各文字(ASCIIコーディングのバイト/オクテット)は、0〜9およびAFの16個の値を表すことができます。256個の値を表すには2つの16進文字が必要です。

「バイナリファイル」では、各バイト(オクテット)は256個の値を表すことができます。

さて、バイナリを使用することのポイントは、それが「最も生の」フォーマットであり、決して人間の消費に役立つ必要がないということです。これにより、ファイルのデータ/オクテット比が大幅に向上します。

バイナリ形式は「IP」に役立ちますが、これは必ずしも主な目的ではありません。ファンによって書かれたエディターツールはたくさんあり(証拠として)、公式ツールも時々あります。

バイナリファイル構造はオフセットで決定でき、テキストファイルのように「行Xと列Yを読み取る」必要がなく、直接シークすることができます。これにより、リソースへのランダムアクセスがはるかに効率的になります。Baulder's Gateファイルの多くの場合、多くは「固定形式」であり、同じようにレイアウトされたメモリ内構造に簡単に(そしてすばやく)ロードできます。(ヒープやその他のデータ構造は、バイナリファイルに直接エンコードされる場合があります。)

バイナリファイルはデータの不透明な構造です。これは終了するための手段にすぎません。内部の情報は、特定のシナリオでのみアクセスできるように設計されています。(これをJSONまたはSQLデータベースと比較してください。前者は「人間が消費できる」限り不透明ではなく、後者は情報のみを公開します。)

さまざまな種類のバイナリファイルと、それぞれが提供するサービスを見てみましょう。オーディオ?画像?ルート?エンティティの場所と統計?ダイアログ?それぞれがエンジンの非常に特定のニーズに合わせて作成されており、「別の方法で実行できる」ものもありますが、必要がなく、既存のツールが用意されている場合は、なぜ変更するのでしょうか。

于 2012-05-03T18:47:07.533 に答える
0

よりコンパクトで、文字列解析の必要はありません。数値「123」を格納する例では、1バイトが必要になります。文字列「123」を格納するには、3バイトと少なくとも1バイトの長さが必要です。今日、私たちが宇宙について考える必要がないと考える人がいるなら、彼/彼女はコードを書くべきではありません。これにより、良いアプリケーションと悪いアプリケーションが異なります。

于 2012-05-03T18:43:13.807 に答える