主 题: 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种标准的流。 ------------------------------------------------ 名称 描 述 例 子 ------------------------------------------------ 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 格式化有所不同。 一般情况我只用二进制格式。 其他一切都有自己控制, 感觉这样不容易出错。