分类:
2007-04-23 18:51:18
struct pixel{ float x; float y; }Pixel[4]; ........ fp = fopen("data", "rb"); for(i = 0;i < 4;i++) fread(&Pixel[4], sizeof(struct pixel), 1, fp); ........ |
开始,我以为是以为fread不能读取一组数到结构体中,后来一查函数,fread/fwrite就
是用来将指定文件数据读以二进制模式取到某个缓存中的(汗),后来在VC中debug了一
下,发现读到的数明显与文件中显示的不一样,后来经过仔细琢磨,发现用fwrite写道文件中
的1是01 00 00 00,而如果受到编辑则1为31,这才明白,一般用的编辑器都是使用的ASCii
方式(当然如果支持的话,可以用二进制书写数据),而fread读取时将ASCii当作二进制来
看待,那么自然读出的数据是不对的。既然病因找到了,那么解决方法自然就有了:
1。换函数。用fprintf,fscanf来读写文件
2。自己写个将ASCii转换为二进制的函数来处理。
3。用现成的转化函数(不知道是什么)
不过fprintf和fscanf输入时将ASCii转化为二进制而输出时将二进制转化为ASCii,所以在
内存与磁盘数据交互频繁的情况下,尽量使用fwrite和fread