您的位置:首页 > 运维架构

fopen里面那个二进制打开和ascii打开有什么区别

2006-07-25 11:21 239 查看
主  题: 
fopen里面那个二进制打开和ascii打开有什么区别?各应用在什么场合呢? 多谢!!百分

作  者: Silenthunter (ViVian Solution)
信 誉 值: 100
所属论坛: C/C++ C语言
问题点数: 100
回复次数: 11
发表时间: 2006-7-18 20:41:01
   
 
   
rt

 回复人: du51(郁郁思扬) ( ) 信誉:100 2006-7-18 20:45:33 得分:0
 
 
 
前者为二进制方式读取或写入.后者以ascii方式读取或写入.

比如说,换行前者可以读出.后者读不出来.会忽略掉.

Top
 
 回复人: du51(郁郁思扬) ( ) 信誉:100 2006-7-18 20:46:31 得分:0
 
 
 
比如说,你读一个图片,mp3之类的,用前者.
读一个记录文件..用后者.

Top
 
 回复人: yingge(盼胖) ( ) 信誉:100 2006-7-18 21:07:07 得分:0
 
 
 
楼上已经说了区别了。

其实主要是为了不同的读取库函数准备的两种方式,如fread就应该用二进制方式,而fgets就应该用文本方式。

Top
 
 回复人: jixingzhong(瞌睡虫:选择了远方,只顾风雨兼程!) ( ) 信誉:102 2006-7-18 21:52:19 得分:0
 
 
 
fopen里面那个二进制打开和ascii打开有什么区别?
=================================
2进制方式操作的时候,
将不考虑实际意义,
只是把数据作为 2 进制流,
写入文件或者从外部读取

以 ascii 方式的话,
中间将有解析的过程,
虽然单位都是字节,但是中间的意义不一样 ...

Top
 
 回复人: jixingzhong(瞌睡虫:选择了远方,只顾风雨兼程!) ( ) 信誉:102 2006-7-18 21:55:23 得分:0
 
 
 
各应用在什么场合呢?
==========
应用要求对应即可。

要求两个对应:
1  是操作函数与打开方式对应,如 使用fread/fwrite 则要使用2进制方式操作文件,
如果使用的是 文本方式(ascii)可能会出错 ...
2  文件的读 和写方式对应,一个文件写的时候是 2进制方式的,那么读取的时候也用2进制方式,否则可能获取的数据会有差别,差别的来源就在于 两种操作方式的差别:一个直接作为2进制流(2进制方式)操作, 一个是以字符流方式操作(ascii) ...

Top
 
 回复人: ckp(surge) ( ) 信誉:100 2006-7-18 22:03:51 得分:0
 
 
 
二进制方式打开
1、会把所有字符都读出来,包括:回车,换行,'/0',直到文件结束,才停止读;
2、可以完全读出所有类型的文件,包括:exe,dll,ocx......
ascii方式打开,当遇到以下字符:
1、回车,换行,'/0',则当前一行文本的停止读的地方,直到本行结束,都不能读出,接着读下一行;
2、只能正确读出文本文件。

Top
 
 回复人: Jim_King_2000() ( ) 信誉:100 2006-7-18 22:07:41 得分:0
 
 
 
没什么太大区别。所有的IO函数都可以用。
只不过回车符有点不一样。一个是0x0a,一个是0x0d 0x0a。具体哪个是哪个我也记不得了。

Top
 
 回复人: wumingchenchao(一缕阳光(虚心学习ing)) ( ) 信誉:100 2006-7-18 22:34:00 得分:0
 
 
 
我以前搜的资料:
--------------------------------------------------------------------------------——
从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。

  ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:
ASC码:    00110101   00110110   00110111   00111000
     ↓       ↓    ↓      ↓
十进制码:   5     6    7    8   共占用4个字节。ASCII码文件可在屏幕上按字符显示,   例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。   由于是按字符显示,因此能读懂文件内容。

  二进制文件是按二进制的编码方式来存放文件的。   例如,   数5678的存储形式为:   00010110   00101110只占二个字节。二进制文件虽然也可在屏幕上显示,   但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。   输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。   因此也把这种文件称作“流式文件”。

16楼  liujingfu123   (Oh_My_GoD)   回复于 2004-12-17 08:49:17  得分 10

我也说两句吧:(摘抄自C语言之家)

什么是流(stream)?

流是程序输入或输出的一个连续的字节序列,设备(例如鼠标、键盘、磁盘、屏幕、调制解调器和打印机)的输入和输出都是用流来处理的。在C语言中,所有的流均以文件的形式出现----不一定是物理磁盘文件,还可以是对应于某个输入/输出源的逻辑文件。C语言提供了5种标准的流,你的程序在任何时候都可以使用它们,并且不必打开或关闭它们。以下列出了这5种标准的流。
------------------------------------------------
名称
aa88
描     述                         例     子
------------------------------------------------
stdin                 标准输入                       键盘
stdout               标准输出                         屏幕
stderr               标准错误                         屏幕
stdprn               标准打印机                     LPT1端口
stdaux               标准串行设备                 COM1端口
------------------------------------------------
需要注意的是,stdprn和stdaux并不总是预先定义好的,因为LPT1和COM1端口在某些操作系统中是没有意义的,而stdin,stdout和stderr总是预先定义好的。此外,stdin并不一定来自键盘,stdout也并不一定显示在屏幕上,它们都可以重定向到磁盘文件或其它设备上。

文本模式(textmode)和二进制模式(binarymode)有什么区别?

流可以分为两种类型:文本流和二进制流。文本流是解释性的,最长可达255个字符,其中回车/换行将被转换为换行符“/n”,(如果以"文本"方式打开一个文件,那么在读字符的时候,系统会把所有的"/r/n"序列转成"/n",在写入时把"/n"转成"/r/n"            archim 's opinion    )。二进制流是非解释性的,一次处理一个字符,并且不转换字符。
通常,文本流用来读写标准的文本文件,或者将字符输出到屏幕或打印机,或者接受键盘的输入;而二进制流用来读写二进制文件(例如图形或字处理文档),或者读取鼠标输入,或者读写调制解调器。
4楼  yhz   (耗子)   回复于 2004-10-20 20:24:24  得分 10

如果用文本方式打开文件,会把“0D   0A”自动变换成“/n”来存在内存中。写入的时候反向处理。
而二进制方式打开的话,就不会有这个过程。

但是,Unicode/UTF/UCS格式的文件,必须用二进制方式打开和读写。

Top
 
 回复人: UPCC(杂食动物) ( ) 信誉:118 2006-7-19 0:10:35 得分:0
 
 
 
流:一种读写的模式而已,不针对任何类型!

二进制打开和ascii打开有什么区别?
----------------------------
ascii是一种数据格式,比如:BCD
二进制是一种数据编码,比如 0000 1111

fopen里面那个二进制打开和ascii打开有什么区别?各应用在什么场合呢?
-------------------------------------------------
fopen打开的是一个文件,不是一种格式,也不是一种编码。
如果问打开这两种文件有什么区别的话,我只知道打开参数也许不一样,
其它我想不出,只知道他们都使用fwrite,fread,fseed,....等共同的函数,也就是说,打开后操作是相同的。但怎么应用我就不知道了...

这方面懂的很少,重在学习,欢迎指正批评

Top
 
 回复人: Jim_King_2000() ( ) 信誉:100 2006-7-19 10:19:34 得分:0
 
 
 
回楼上。
二进制打开之后可以使用fgets,ascii打开之后也可以使用fwrite。
区别就是
“只不过回车符有点不一样。一个是0x0a,一个是0x0d 0x0a。具体哪个是哪个我也记不得了。”

Top
 
 回复人: Bible_Chou(从明天起, 做一个幸福的人) ( ) 信誉:100 2006-7-19 10:59:21 得分:0
 
 
 
格式化有所不同。
一般情况我只用二进制格式。
其他一切都有自己控制,
感觉这样不容易出错。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  磁盘 语言 stream dos exe