私はC++を学んでいます。私はFortranプログラムによって生成されたいくつかのファイルをC++プログラムで読みたいと思っています。私が読みたいファイルのそれぞれには、0,1、または-1の数字のリストが含まれています。これらの数値は、Fortranプログラムで定義された1バイト整数の配列の要素です。サンプルのFortranコードとサンプルのC++コード(ここでは、まず符号なし整数配列にファイルを読み込もうとします)を次に示します。 Fortranコードでは、バイナリファイルに1バイト整数の配列を書き込み、そのバイナリファイルを配列に読み込んで配列要素を出力します。同じバイナリファイルをC++コードの配列に読み込み、配列要素を出力しようとすると、出力が予想外になります。誰かがそれを得るのを助けることができますか?誰かがFortranコードから2番目のdo-loopに相当するものをC++に与えるといいでしょう。最終的にファイルを1バイトの符号付き整数配列に読み込みたいので、そのために必要なのは何ですか?Fortranで生成されたバイナリファイルをC++で符号付き整数配列に読み込む
FORTRAN90コード:
implicit none;
integer*1 a(1:2),i
open(10, file="binary.bin", access="stream", form="unformatted")
do i=1,2,1
a(i)=1
write(10) a
enddo
close(unit=10)
open(20, file="binary.bin", access="stream", form="unformatted")
do i =1,2,1
read(20) a(i)
write(*,*) a
enddo
close(unit=20)
end
出力:
C++コード:
#include <iostream>
#include <fstream>
int main()
{
int i = 1;
int j = 1;
int max_i = 2;
char a[2];
using namespace std;
std::ifstream myinputFile;
myinputFile.open ("binary.bin", std::ios::in | std::ios::binary);
if (!myinputFile.is_open()) return false;
for (i = 1; i <= max_i; ++i) {
myinputFile.read (a, 2);
std::cout << i <<" "<< a[i] << std::endl ;
}
return 0;
}
Output:
1
2 @
-----------
Expected output:
1 1
2 1
OPもインデックスとして1でループを開始していることに注意してください。 –
良い点、それを逃した。 – Patrick