Каков самый простой способ отформатировать 2D-матрицу двойников в двоичном формате для чтения в IDL?

Итак, у меня есть матрица двойников i на j в C++, которую я хочу прочитать в программе IDL.

Допустим, матрица называется данными, с размером ROWS в COLS и строкой имени, сохраненной в имени файла. И я просто записываю значения в потоке в двоичный файл.

ofstream myfile (filename, ios::binary);
if(myfile.isopen())
{
  for (int i = 0; i < ROWS; i++){
     for (int j=0; j < COLS; j++){
          myfile<<data.at(i,j);
}
myfile.close();

Затем я хочу прочитать его обратно в IDL, но я новичок в работе с двоичными файлами в IDL, и после документации я попал сюда, но это не работает.

function read_binmatrix, filename, ROWS, COLS, thetype

    mat = READ_BINARY(filename,DATA_TYPE=thetype,DATA_DIMS=[ROWS-1,COLS-1])
    return, mat

end
 ...
 ...
matrix = read_binmatrix(file2,num_rows,num_cols,5)

... но я получаю эту ошибку в качестве вывода.

% READ_BINARY: READU: End of file encountered. Unit: 100, File:
...
% Execution halted at: READ_BINMATRIX     21 
...

person Jeremy Gamet    schedule 25.07.2016    source источник
comment
Вы тестировали часть C++ отдельно, а также просматривали двоичный файл, чтобы проверить ожидаемые значения?   -  person M4rc    schedule 25.07.2016
comment
Вы уверены, что этот вопрос правильно помечен тегом idl?   -  person πάντα ῥεῖ    schedule 25.07.2016
comment
IDL, сокращение от «Язык описания интерфейса», представляет собой язык [...] (не путать с idl-programming-language, язык, используемый для анализа научных и медицинских изображений) – Вы используете правильный тег [idl]?   -  person Jonny Henly    schedule 25.07.2016
comment
myfile<<data.at(i,j); записывает в файл текст, а не двоичные данные. Для записи в двоичном формате используйте std::ofstream::write().   -  person πάντα ῥεῖ    schedule 25.07.2016
comment
Отредактировано: тег изменен на idl-programming-language (это действительно сбивает с толку)   -  person Jeremy Gamet    schedule 26.07.2016
comment
@πάνταῥεῖ Я не могу отдать вам должное за правильный ответ, если вы напишете правильный ответ в комментарии :) хотя, спасибо ;) ... мне написать ответ или вы этого хотите? Это было абсолютно так. Я уверен, что я не первый человек, который забывает и делает это неправильно.   -  person Jeremy Gamet    schedule 26.07.2016
comment
@JeremyGamet Ну, я написал ответ.   -  person πάντα ῥεῖ    schedule 26.07.2016


Ответы (1)


 myfile<<data.at(i,j); 

записывает в файл текст, а не двоичные данные. Чтобы записать числа в двоичном формате, используйте std::ofstream::write():

 myfile.write(reinterpret_cast<char*>(&data.at(i,j),sizeof(decltype(data.at(i,j)))); 
person πάντα ῥεῖ    schedule 25.07.2016