我正在将二进制文件读入一组外部文本文件以进行后期处理。我的代码如下:
for(k = 0; k < 76; k++) {
for(j = 0; j < 76; j++) {
curr = curr + j + k*(dim - 76);
sprintf(Filename, "%s_%d.txt", file,count);
fp = fopen(Filename, "w");
for(i = 0; i < 256; i++) {
fseek(qFile, (curr + i*dim*dim) * sizeof(float), SEEK_SET);
fprintf(oFile, "%f\n", curr + i*dim*dim);
fread(&temp, sizeof(float), 1 ,qFile);
fprintf(fp, "%5.2f\n", temp);
}
fclose(fp);
count++;
}
}
但是,当我查看oFile指向的文件时,每组256个值的起始位置不会间隔1,但如下所示:
67024216
67024216
67024216
67024220
67024224
67024228
67024232
67024240
67024248
67024256
67024264
67024276
67024288
67024300
67024312
.
.
.
我看不出为什么单个元素中的间距是4,我知道浮点数的大小是4字节,但是打印到文件的值不是字节数,而是多个的字节数。
答案 0 :(得分:1)
Single-precision floating-point numbers不像整数一样工作。它们实际上具有 less 精度,因为8位用于符号和指数。这让你有24位。
你的所有数字恰好都符合24位。或者,相反,他们会如果你丢掉了低两位,这恰好总是为零(即增加4的倍数)。
我不知道它是否会在这里解决你所有的问题,因为我显然不知道项目的细节。但是,如果您将float
定义更改为double
,则至少应该让您解决此问题。
答案 1 :(得分:0)
编辑如下的代码产生了理想的结果:
for(k=0;k<76;k++){
curr = init+k*dim;
for(j=0;j<76;j++){
curr = init+j+k*dim;
sprintf(Filename,"%s_%d.txt",file,count);
fp=fopen(Filename,"w");
for(i=0;i<256;i++){
fseek(qFile,(curr+i*dim*dim)*sizeof(float),SEEK_SET);
fprintf(oFile,"%lf\n",curr+i*dim*dim);
fread(&temp,sizeof(float),1,qFile);
fprintf(fp,"%5.2f\n",temp);
}
fclose(fp);
count++;
}
}