不知数据在内存中是如何存放的,是二进制,还是ASCII形式,文件在磁盘上是二进制还是ASCII形式,这将关系到文件函数的使用,如:如果在内存中是二进制,用"W"的方式打开一个文件,然后用
fwrite()函数写文件,就会发生错误,如果在内存中是ASCII形式,用fwrite()就不会发生错误,不知我说的对不对,请指点……谢谢!
[此贴子已经被作者于2006-6-18 9:09:37编辑过]
不知数据在内存中是如何存放的,是二进制,还是ASCII形式,文件在磁盘上是二进制还是ASCII形式,这将关系到文件函数的使用,如:如果在内存中是二进制,用"W"的方式打开一个文件,然后用
fwrite()函数写文件,就会发生错误,如果在内存中是ASCII形式,用fwrite()就不会发生错误,不知我说的对不对,请指点……谢谢!
[此贴子已经被作者于2006-6-18 9:09:37编辑过]
用二进制方式写成的文件还得用二进制方式读该文件。
用ASCII方式写成的文件还得用ASCII方式读该文件。
/*以下在C盘根目录下生成两个数据文件
一个是ASCII码格式的data.txt文件
另一个是二进制格式的data.bin文件
内容是差不多的。但是前者可以用记事本
打开正常阅读,后者用记事本打开则会看
到一些令你费解的符号。
*/
#include<stdio.h>
main()
{
FILE *f1,*f2;
int i;
f1=fopen("c:\\data.txt","w");
f2=fopen("c:\\data.bin","wb");
for(i=1;i<=100;i++)
{
printf( "%d ",i);
fprintf(f1,"%d ",i);
fwrite(&i,sizeof(int),1,f2);
if(i%10==0) printf( "\n");
if(i%10==0)fprintf(f1,"\n");
}
fclose(f1);
fclose(f2);
}
一个文件在打开之前怎么知道它是二进制还是ASCII形式呢?
答:这个文件不是天上掉下来的,当初“写”文件时的格式就决定了今天该用同样的方式打开它(们)。
如果文件是ASCII,那么在内存中就是ASCII形式吗?
答:除了字符串,其它各型数据在内存中都是二进制编码的。
如果把内存中的ASCII文件用“Wb“方式写入磁盘,是不是要进行转换呢?
答:“内存中的ASCII文件”是唐伯虎的古画(话),此言差矣。
运行此程序,查看c:\data文件,用16进制方式查看可知,一个数字,如果用”W“方式则会写入它的ASCII值,如果
用”Wb“的方式则会把它转换成对应的二进制值写入,如果是输入的”1“则写入0001,”2“写入0010,”3“写入0011,”4“写入0100,……可是如果输入是字母,汉字用”Wb“方式写入,那么会将要输入的字符转换成什么呢?
[此贴子已经被作者于2006-6-18 10:09:04编辑过]
如果输入是字符或汉字用“wb”方式写入,那么将会把输入的字符转换成什么呢?
答:对于字符,保存其ASCII码。对于汉字,保存其机内码。如果会使用debug.exe
就可以清楚地看到这一切。
运行结果如下:
202 253 215 214 181 216 199 242 118 115 186 205 208 179 202 192 189 231
解读(以第一个字为例)
202 253 为“数”的机内码,
分别减去160后得:42 93
这说明“数”位于42区93位。
[此贴子已经被作者于2006-6-18 10:25:48编辑过]