我有一个二进制文件,我将使用 fread 将此二进制文件中的数据读取到结构数组中。
但是,我不知道将什么值传递给 fread 作为其第二个参数。我知道文件大小是 536870912 位。二进制文件是在 512^3 数组被访问的基础上构建的。这意味着每个数据条目在二进制文件中都是浮点类型,为每个数据元素指定 4 个字节。
我在提到位时犯了一个错误。我读了一个 C 程序输出的内容,找到了文件的大小——它输出了 536870912 位!向任何困惑的人道歉。
这是我用来将二进制文件中的数据读取到我的结构中的代码(一个简化的结构 - 还有 10 个其他参数!)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
// Define the model structure
struct model {
float density;
};
// Entry point for the program
int main () {
int counter;
long lSize;
char * buffer;
size_t result;
FILE *pFile;
int i,j,k,ibox; /* Loop indices for the physical grid */
struct model ***mymodel;
pFile = fopen("core1_dens_0107.bin","rb");
if (pFile == NULL) { printf("Unable to open density file!"); exit(1); }
// obtain file size:
fseek (pFile , 0 , SEEK_END);
lSize = ftell (pFile);
rewind (pFile);
printf( "File size : %lu Bits \n", lSize );
for ( j = 0 ; j < 512 ; j++ ) {
for ( k = 0; k < 512; k++ ) {
for ( i = 0; i < 512; i++ ) {
fread(&mymodel[i][j][k].density,4,1,pFile);
printf("%f \n",mymodel[i][j][k].density);
}
}
}
fclose(pFile);
return 0;
}