Fortran コードによって生成されたバイナリ ファイルを (C++ プログラムで) 読み取る際の問題は、何度も質問されており、Fortran レコードの規則について満足のいく説明が提供されています (例: http://local.wasp.uwa.edu.au/~pbourke )。 /dataformats/fortran/ )
ただし、C++ プログラムを実装しようとすると、fortran の規則を念頭に置いても機能しません。ここでは、バイナリ ファイル "test.bin" に 1 つの整数が含まれており、fortran ルーチンによってバイナリ形式で書き込まれていると仮定します。これをC ++で読み取ろうとする方法は次のとおりです。
#include <iostream>
#include <fstream>
using namespace std;
int main () {
ifstream file;
file.open("test.bin", ios::in|ios::binary);
if (file.is_open())
{
int ival;
file >> ival >> ival; cout<< ival<<endl;
}
return 0;
}
ここで、二重の >>ival 構造は最初に fortran レコードのヘッダー (レコードのサイズをバイト単位で含む) を読み取り、2 番目の >>ival は値を抽出することになっています。ファイルに書かれている整数は 8 ですが、プログラムは 0 を出力するので、データを正しく読み取れません。
バイナリ ファイルの内容は次のとおりです: ^D^@^@^@^@^@^@^@^H^@^@^@^D^@^@^@^@^@^@^@
だから私の質問 - 私は何を間違っていますか?
16 進エディタの表示内容は次のとおりです。
0000000: 0400 0000 0000 0000 0800 0000 0400 0000 ................
0000010: 0000 0000 0a .....
それが何を意味するのか分かりますか?