Chinaunix首页 | 论坛 | 博客
  • 博客访问: 491227
  • 博文数量: 144
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1190
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-08 20:16
文章分类

全部博文(144)

文章存档

2017年(1)

2015年(5)

2014年(108)

2013年(30)

我的朋友

分类: C/C++

2014-04-26 21:53:45

调试代码的时候发现一个问题,用二进制形式打开文件 ne 和文件2.jpg。把ne中数据转写到2.jpg。有时候会丢失数据。
调试发现,buf用int格式,fread(buf,sizeof(int),2,file1),当一次读取文件字符小于 int一半(2个字符)的时候就不读取了,自动舍去了。
例如:ne中放入1,则2.jpg中会没有数据,ne中放入12同样2.jpg中没有数据。
         ne中放入123时候就会正确读取。
         ne中放入123456,后面的56就会舍去不读。
修改得办法就是,buf改成char类型,同时后面的改成sieof(char)

 如果就把后面读写时候改成sizeof(char)也能正确读取,就用后两个字节的位置调试结果如下(
       ne文件中开始存入123456
       (因为我fread的时候每次读取2个字节readCount=fread(buf,sizeof(char),2,file1);)用十六进制格式输出,
       注意:1的ascii马49 ,文件中是按照ascii马格式存储的:
=== 0031
=== 8043231
2
=== 0033
=== 8043433
2
=== 0035
=== 8043635
2
=== 000a
=== 804360a
1
=== 000a
=== 804360a
0
把fread每次读取的字节数改成4个,调试如下:
=== 0031
=== 34333231
4
=== 0035
=== 340a3635
3
=== 0035
=== 340a3635
0


点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<stdlib.h>


  3. int main()
  4. {
  5.   
  6.   FILE *file1,*file2;
  7.   int buf[10];
  8.   int readCount=1;
  9.   char a;
  10.   
  11.   file1=fopen("ne","rb");
  12.   if(file1==NULL)
  13.   {
  14.    printf("open file1 error\n");
  15.    return 1;
  16.    }


  17.   file2=fopen("2.jpg","w+b");
  18.   if(file2==NULL)
  19.   {
  20.    printf("open file2 error\n");
  21.    return 1;
  22.    }

  23.   while(readCount>0)
  24.   {
  25.   readCount=fread(buf,sizeof(int),2,file1);
  26.   a=(char) buf[0];
  27.   printf("=== %04x\n",a);
  28.   printf("=== %04x\n",buf[0]);

  29.   printf ("%d\n", readCount);
  30.   fwrite(buf,sizeof(int),readCount,file2);

  31.     }
  32.    // fwrite(buf,sizeof(buf),1,file2);

  33.   fclose(file1);
  34.   fclose(file2);

  35. return 0;
  36. }

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