标题:数据在内存中是以二进制还是以ASCII形式存放
只看楼主
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
结帖率:100%
 问题点数:0 回复次数:24 
数据在内存中是以二进制还是以ASCII形式存放

不知数据在内存中是如何存放的,是二进制,还是ASCII形式,文件在磁盘上二进制还是ASCII形式,这将关系到文件函数的使用,如:如果在内存中是二进制,用"W"的方式打开一个文件,然后用
fwrite()函数写文件,就会发生错误,如果在内存中是ASCII形式,用fwrite()就不会发生错误,不知我说的对不对,请指点……谢谢!

[此贴子已经被作者于2006-6-18 9:09:37编辑过]

搜索更多相关主题的帖子: 二进制 内存 ASCII 数据 形式 
2006-06-18 09:03
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 

用二进制方式写成的文件还得用二进制方式读该文件。
用ASCII方式写成的文件还得用ASCII方式读该文件。


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-18 09:19
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
得分:0 
一个文件在打开之前怎么知道它是二进制还是ASCII形式呢?如果文件是ASCII,那么在内存中就是ASCII形式吗?如果把内存中的ASCII文件用“Wb“方式写入磁盘,是不是要进行转换呢?

2006-06-18 09:26
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 

/*以下在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);
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-18 09:36
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 
以下是引用han2y在2006-6-18 9:26:45的发言:

一个文件在打开之前怎么知道它是二进制还是ASCII形式呢?
答:这个文件不是天上掉下来的,当初“写”文件时的格式就决定了今天该用同样的方式打开它(们)。

如果文件是ASCII,那么在内存中就是ASCII形式吗?
答:除了字符串,其它各型数据在内存中都是二进制编码的。

如果把内存中的ASCII文件用“Wb“方式写入磁盘,是不是要进行转换呢?
答:“内存中的ASCII文件”是唐伯虎的古画(话),此言差矣。


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-18 09:47
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-18 10:04
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
得分:0 

运行此程序,查看c:\data文件,用16进制方式查看可知,一个数字,如果用”W“方式则会写入它的ASCII值,如果
用”Wb“的方式则会把它转换成对应的二进制值写入,如果是输入的”1“则写入0001,”2“写入0010,”3“写入0011,”4“写入0100,……可是如果输入是字母,汉字用”Wb“方式写入,那么会将要输入的字符转换成什么呢?

[此贴子已经被作者于2006-6-18 10:09:04编辑过]


2006-06-18 10:04
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 
回复:(han2y)查看它的16进制文件可知,一个数字,如...
以下是引用han2y在2006-6-18 10:04:35的发言:

如果输入是字符或汉字用“wb”方式写入,那么将会把输入的字符转换成什么呢?
答:对于字符,保存其ASCII码。对于汉字,保存其机内码。如果会使用debug.exe
就可以清楚地看到这一切。


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-18 10:09
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-18 10:09
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 
/*以下程序演示“数字地球vs和谐世界”的机内码*/
#include<stdio.h>
main( )
{
unsigned char s[]="数字地球vs和谐世界",*p=s;
while(*p)printf("%d ",*p++);
printf("\n");
}

运行结果如下:
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编辑过]


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-18 10:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-73092-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047283 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved