什么是格式化二进制双打的二维矩阵读入IDL最基本的方法是什么? [英] What's the most basic way to format a 2D matrix of doubles in binary for reading into IDL?

查看:325
本文介绍了什么是格式化二进制双打的二维矩阵读入IDL最基本的方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我必须通过在C ++中的双打,我想读入程序IDL j的矩阵中的我。

让我们说这个矩阵称为数据与大小行乘COLS和名称字符串保存到文件名。我只是写出来的值在流二进制文件。

 的ofstream MYFILE(文件名,IOS ::二进制);
如果(myfile.isopen())
{
  的for(int i = 0; I<的行;我++){
     对于(INT J = 0; J< COLS; J ++){
          MYFILE&所述;&下; data.at(I,J);
}
myfile.close();

然后我想读它放回IDL,但我是新来的IDL二进制工作,并按照文件在这里得到了我,但它不工作。

 功能read_binmatrix,文件名中,行,COLS,thetype    垫= READ_BINARY(文件名,DATA_TYPE = thetype,DATA_DIMS = [ROWS-1,COLS-1])
    返回时,垫结束
 ...
 ...
矩阵= read_binmatrix(文件2,NUM_ROWS,NUM_COLS,5)

...但我得到这个错误作为输出。

 %READ_BINARY:READU:到达文件末尾。单位:100,文件:
...
%执行停止在:READ_BINMATRIX 21
...


解决方案

  MYFILE<< data.at(I,J);

写入文本文件,而不是二进制数据。写数字的二进制格式使用 STD :: :: ofstream的写()

  myfile.write(reinter pret_cast<字符*>(安培; data.at(I,J)的sizeof(decltype(data.at(I,J) )));

So I have an i by j matrix of doubles in C++ that I want to read into an IDL program.

Lets say that the matrix is called data, with size ROWS by COLS, and name string saved to filename. And I just write the values out in a stream to a binary file.

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();

I then want to read it back into IDL but I'm new to working with binary in IDL and following the documentation has gotten me here but it's not working.

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)

...but I get this error as output.

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

解决方案

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

writes text to the file, not binary data. To write the numbers in binary format use std::ofstream::write():

 myfile.write(reinterpret_cast<char*>(&data.at(i,j),sizeof(decltype(data.at(i,j)))); 

这篇关于什么是格式化二进制双打的二维矩阵读入IDL最基本的方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆