Fortran コードで生成されたバイナリ ファイルがあります。このファイルには double の配列が含まれています。これを C プログラムで開き、通常の配列と同じように操作する必要があります。
どうすればいいのですか?
double型はバイナリファイルでどのように表されますか?
Fortran コードで生成されたバイナリ ファイルがあります。このファイルには double の配列が含まれています。これを C プログラムで開き、通常の配列と同じように操作する必要があります。
どうすればいいのですか?
double型はバイナリファイルでどのように表されますか?
ほとんどすべての Fortran コンパイラは、フォーマットされていない (つまり、バイナリの) シーケンシャル ファイルの場合、各レコードの先頭と末尾にレコードの長さを書き込みます。通常、長さは 4 バイトで記述されますが、8 バイトを使用するコンパイラもあります。レコードは、単一の Fortran 書き込みステートメントで書き込まれるすべてのものです。この配列がこのタイプのファイルを使用して単一の Fortran 書き込みステートメントで書き込まれた場合、4 または 8 バイトをスキップする必要があり、次に配列、さらに 4 または 8 バイトが追加されます。16 進エディタでファイルを表示すると、おそらくこれを理解できます。配列が複数の write ステートメントで分割されて (たとえば、列または行ごとに) 書き込まれた場合、各レコードはこの構造になります。
ファイルがフォーマットなしで Fortran によって書き込まれる場合、Fortran の double 型はそのコンピューターのバイナリ表現で書き込まれます。同じタイプのコンピューターで C で読むことができるはずです。言語だけでなくアーキテクチャを変更する場合、バイナリ表現が異なる可能性があります。
Fortran には、レコード長情報を含まない他のファイル アクセス方法があります。たとえば、直接アクセスします。ストリーム アクセスの新しい方法は、言語間の互換性のために設計されています。
配列が多次元の場合、Fortran は列優先の配列を持ち、C は行優先を使用するため、配列を転置したい場合があります。
関連する質問: Fortran 形式のないファイル形式とPython での Fortran 形式のないファイルの読み取り
原則としてできません。
Fortran バイナリ ファイルの形式は規定されていません。つまり、プログラムの状態を Fortran バイナリ ファイルに保存し、同じ Fortran 実装を使用してそれを再度開くことはできますが、別の Fortran 実装を使用しても確実にそうすることはできません。
現在、状態を正常に保存できる方法は限られています。そのため、特定の Fortran バイナリ ファイルの構造を十分に詳細に把握して、ファイルを開くことができる可能性は十分にあります。 C プログラムを作成し、内容を読み取ります。ただし、その知識は問題の Fortran コンパイラに完全に固有のものです。
したがって、最善の方法は、たとえば を含む Fortran 配列を作成し、[0, 1, 2, 3, 4, 256, 65536, 65537, 1e10, 1e20, 1e30, 1e40]
それをバイナリ ファイルに書き込み、バイナリ エディタでそれを調べてそこに何があるかを確認することです。
後は独りぼっちだな……。
私の意見では、fortran バイナリを読み取るより良い方法は、実際には fortran から読み取り、配列を Cに渡すことです。それはあなたに多くの苦痛を救うことができます。
最も難しい部分は、Fortran サブルーチンをラップすることです。名前マングリングは、C と fortran の間では簡単ではありません。これは、使用するコンパイラ (つまり、プラットフォーム) と Fortran のバージョンによって異なります。簡単な例については、こちらとこちらをご覧ください。
最初の選択肢は、適切なコンパイル オプションを使用して「手動」で行うことです。
ヒント: マングリングを知るには、Linuxで nmコマンドを使用するか、DLL エクスポート ビューアーのようなツールを使用します。
より良い選択は、この種の操作を処理するのに役立つモジュールiso_c_bindingを導入するFortran 2003を使用することです。