我有一个由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;