Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1958439
  • 博文数量: 261
  • 博客积分: 8073
  • 博客等级: 中将
  • 技术积分: 2363
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-10 15:23
文章分类

全部博文(261)

文章存档

2013年(1)

2012年(1)

2011年(50)

2010年(34)

2009年(4)

2008年(17)

2007年(55)

2006年(99)

分类:

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

 

阅读(2060) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

gewo662009-11-25 09:41:01

为什么不用fp=fopen("data","r")读字符呢?