Мне не нравится работать под Cygwin.
Проблема в том, что когда я использую 64-битный g ++ для компиляции одного и того же куска кода, я получаю неожиданный другой результат.
Исходный код выглядит следующим образом:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int rows = 200;
int cols = 200;
float data[rows*cols];
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
data[i*cols+j] = i*cols+j;
}
}
const char *file = "tmp.txt";
ofstream fs(file);
if (fs.is_open())
{
fs.write((char*)&rows, sizeof(int));
cout << fs.tellp() << endl;
fs.write((char*)&cols, sizeof(int));
cout << fs.tellp() << endl;
fs.write((char*)data, sizeof(float)*rows*cols);
cout << fs.tellp() << endl;
fs.close();
}
return 0;
}
Я пишу два целых числа и блок значений с плавающей запятой в двоичный файл.Он печатает, сколько байтов он написал.
Ожидаемый результат:
4
8
160008
Все действия были выполнены под Cygwin.Когда код был скомпилирован с g ++. Exe, результат правильный.
Но когда я использую x86_64-w64-mingw32-g ++. Exe (только с помощью которого можно генерировать 64-битный двоичный файл), результат передается по проводной схеме.
4
8
160506
Проводной, для чего дополнительные байты?Я пытаюсь здесь.
Спасибо за любой совет.