私は最近、C/C++ を使用して多くのバイナリ ファイルを読み込んでいますが、それがどれほど洗練されていないかに悩まされています。次のような多くのコードを取得します(その後、先に進みました):
uint32_t type, k;
uint32_t *variable;
FILE *f;
if (!fread(&type, 4, 1, f))
goto boundsError;
if (!fread(&k, 4, 1, f))
goto boundsError;
variable = malloc(4 * k);
if (!fread(variable, 4 * k, 1, f))
goto boundsError;
または、ローカルのパック構造体を定義して、一定サイズのブロックを簡単に読み取れるようにします。ただし、このような単純な問題、つまり、指定されたファイルをメモリに読み込む場合は、より効率的に、より読みやすい方法で実行できるように思えます。ヒント/コツなどはありますか?これを処理するためのライブラリや何かを探しているわけではないことを明確にしたいと思います。自分のファイルを設計していて、ファイルの仕様を大幅に変更しなければならないとしたら、と思うかもしれませんが、今のところはスタイル上の答えを探しているだけです。
また、私はmmap
mmap が大好きです! 私はそれをよく使用しますが、問題は、標準入出力を使用する場合には実際には存在しない、整列されていないデータ型を処理するための厄介なコードにつながることです。最終的には、メモリから読み取るための stdio のようなラッパー関数を作成することになります。
ありがとう!
編集:ファイル形式を変更できないことも明確にする必要があります。読み取る必要があるバイナリ ファイルがあります。別の形式でデータを要求することはできません。