Я изучаю С++. Я хочу прочитать некоторые файлы, сгенерированные программой fortran в программе C++. Каждый из файлов, которые я хочу прочитать, содержит список чисел, равных 0, 1 или -1. Эти числа являются элементами массива 1-байтовых целых чисел, определенных в программе на Фортране. Пример кода на Фортране, а также пример кода на C++ (в котором я пытаюсь прочитать файл в массив целых чисел без знака, для начала) написан ниже. В коде на Фортране я записываю массив 1-байтовых целых чисел в двоичный файл, затем читаю этот двоичный файл в массив и печатаю элементы массива. Когда я пытаюсь прочитать тот же двоичный файл в массив в коде C++, а затем распечатать элементы массива, результат будет неожиданным. Может ли кто-нибудь помочь мне сделать это правильно? Было бы здорово, если бы кто-нибудь дал C++-эквивалент второго цикла do-loop из кода fortran. Поскольку я, наконец, хочу прочитать файлы в 1-байтовые целочисленные массивы со знаком, что для этого нужно?
код фортран90:
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
Выход:
1
1
Код С++:
#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