为什么一个正常的数用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再输出