如何在子记录位置读取C ++中的fortran二进制文件

时间:2015-02-25 16:26:51

标签: c++ binary

我有一个由fortran代码生成的二进制文件。该文件包含大量双打,长度为> 2GB。我需要打开文件并读取数组。我设法做到这一点,其中fortran包括子记录。我到目前为止使用的代码是:

std::ifstream fin;

fin.open(_fileName.c_str(), std::ifstream::in);

for(int i=0; i<_nnz; i++){

    fin.read( reinterpret_cast<char*>( &tester[i] ),  sizeof(double));

}

不幸的是,这适用于包含子记录的位置。据我所知,子记录的位置从2147483639字节开始,宽度为2 * 4 bye long(结束记录+开始记录)。另外sizeof(double)== 8。因此,我有一个双倍的记录。有没有办法读取18字节信息并从中提取双倍信息?为了开始,我发布了无效的代码。

char tmp[16];
char tmp8[8];

fin.read( tmp,  sizeof(char)*16 );

for(int iC=0; iC<7;iC++)
    tmp8[iC]=tmp[iC+8];
tmp8[7]=tmp[15];

tmpStr << tmp8;
std::cout << (double)tmpStr.str()<< std::endl;

0 个答案:

没有答案