我正在生成500个随机点(每个点的维度为4)并将它们写入二进制文件,如下所示:
FILE *fp = fopen("file.bin", "wb+");
float *buf = (float *) calloc(500 * 4, sizeof(float));
srand(1);
for (i = 0; i < (500 * 4); ++i) {
buf[i] = (float) rand() / (float) RAND_MAX; // Later I shall treat every 4 values as one point.
}
fwrite(buf, sizeof(float), 500 * 4 * sizeof(float), fp);
fclose(fp);
稍后在我的代码中,我想只读取前100个点(即100 * 4,因为每个点是dim = 4)。我使用以下代码来执行此操作,但我遇到了问题,并且它没有真正打印任何内容:
FILE *fp = fopen("file.bin", "rb+");
fseek(fp, 0, SEEK_SET);
int c, cnt=0;
while(1)
{
c = fgetc(fp);
if(feof(fp) || (cnt == 100)) { break; }
printf("%c", c);
cnt++;
}
printf("\n");
fclose(fp);
答案 0 :(得分:4)
如果您只想回读100个元素(如4个浮点数),那么您放入fread
的数字就像这样...
fread(buf, sizeof(float), 100 * 4, fp);
根据上面的各种评论,您对fwrite
的致电应该看起来类似,因为您不需要额外的sizeof(float)
fwrite(buf, sizeof(float), 500 * 4, fp);