调试代码的时候发现一个问题,用二进制形式打开文件 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
-
#include<stdio.h>
-
#include<stdlib.h>
-
-
-
int main()
-
{
-
-
FILE *file1,*file2;
-
int buf[10];
-
int readCount=1;
-
char a;
-
-
file1=fopen("ne","rb");
-
if(file1==NULL)
-
{
-
printf("open file1 error\n");
-
return 1;
-
}
-
-
-
file2=fopen("2.jpg","w+b");
-
if(file2==NULL)
-
{
-
printf("open file2 error\n");
-
return 1;
-
}
-
-
while(readCount>0)
-
{
-
readCount=fread(buf,sizeof(int),2,file1);
-
a=(char) buf[0];
-
printf("=== %04x\n",a);
-
printf("=== %04x\n",buf[0]);
-
-
printf ("%d\n", readCount);
-
fwrite(buf,sizeof(int),readCount,file2);
-
-
}
-
// fwrite(buf,sizeof(buf),1,file2);
-
-
fclose(file1);
-
fclose(file2);
-
-
return 0;
-
}
阅读(2686) | 评论(0) | 转发(1) |