读书人

又是一个二进制文件的读写浮点数有关问

发布时间: 2012-03-12 12:45:33 作者: rapoo

又是一个二进制文件的读写浮点数问题!
写文件用的是:
FILE *file;
file=open( "data.dat ", "wb ");
fwrite(&somefoate,sizeof(float),1,file);//这一语句被多次执行,也就是说写入了很多的浮点数
读的时候比较复杂:
if(stat( "data.dat ",&buf)) // get the file size
exit(-1);
num = buf.st_size/sizeof(float);
farray = (float *)malloc(buf.st_size);
FILE *fp=fopen( "data.dat ", "r+b ");
fread(farray,sizeof(float),num,fp);
但是会发现写入得数据和读出的数据完全不同?为什么呢?请高手指点一二。
谢高手耐心!赞高手博学!


[解决办法]
#include <sys\stat.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int i;
float farr[5]={1.0, 2.0, 3.0, 4.0, 5.0}, *farray;
FILE *fp = fopen( "data.txt ", "wb ");

for(i=0; i <5; i++)
fwrite(&farr[i], sizeof(float), 1, fp);
fclose(fp);

struct stat buf;
if(stat( "data.txt ", &buf)) // get the file size
exit(-1);
int num = buf.st_size/sizeof(float);
farray = (float *)malloc(num * sizeof(float)); //buf.st_size);
fp=fopen( "data.txt ", "rb ");
fread(farray, sizeof(float), num, fp);
for(i=0; i <5; i++)
printf( "%f, %f\n ", farr[i], farray[i]);
fclose(fp);

system( "pause ");
return 0;
}

没有任何问题啊,
楼主你自己检查一下你的程序 ....
[解决办法]
文件内容由于使用 2进制方式写文件,
可能直接阅读是垃圾,
但是只要使用和 写方式完全对应的方式 读取,
那么读取的数据不会有问题的。

所以,检查读取过程和写入过程是否对应好了!

读书人网 >C语言

热点推荐