读书人

为什么一个正常的数用fwrite写入到文件

发布时间: 2012-04-25 19:32:32 作者: rapoo

为什么一个正常的数用fwrite写入到文件中后会变成巨小的数~
部分代码如下:

for (i = 0; i < Height; i++)
{

for (j = 0; j < Width; j++)
{
szPixel[i][j] = 10000 * exp((double)-((i - Center_X)*(i - Center_X) + (j - Center_Y)*(j - Center_Y))/20)+100;

//cout<<szPixel[i][j]<<" ";
}
//cout<<endl;

}


fwrite(szPixel, sizeof(unsigned int), Width*Height, file);


以上代码中:
Width = 64
Height = 64
Center_X = 30
Center_Y = 30

szPixel[][]是64*64的二维数组,元素类型为unsigned int

for循环内注释的那两条语句是我用于测试在屏幕上输出的数据,经检查输出是正常的,也就是0~10000之间的数字。问题在于fwrite这一句,写入文件后,所有大于0 的数字都变成科学计数法的类型,并且都是e-40数量级的~~~~~

不借,求指导~~~

[解决办法]
fwrite是以二进制写入的 你可以试试用fprintf
[解决办法]
 size_t fwrite(const void* buffer,size_t size,size_t count,FILE* stream);
  注意:这个函数以二进制形式对文件进行操作,不局限于文本文件
  返回值:返回实际写入的数据块数目
  (1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。
  (2)size:要写入内容的单字节数;
  (3)count:要进行写入size字节的数据项的个数;
  (4)stream:目标文件指针。
  (5)返回实际写入的数据项个数count
[size=14px][/size]
[解决办法]
不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了

[解决办法]
楼主再读取来看看,数没变吧?
[解决办法]
可以先将数字格式化成string再输出

读书人网 >C语言

热点推荐