C语言文本方式和二进制方式读写操作的区别

如题所述

首先要明白一点:任何数据在内存中或者硬盘上的存储都是1、0组成的序列,从硬盘、内存这个角度看根本不存在什么二进制和文本模式之分
区别
稍对C语言操作文件有了解都知道2点:1、首先应该fopen打开文件2、有两类文件操作函数,对应着二进制模式和文本模式。
两个模式的区别在两个地方,这两个地方的区别正好体现在刚才说的2点上。
1、
打开文件时选择模式
使用fopen函数时,要给予第二个参数一个值,告诉fopen使用什么模式打开文件。这里的参数决定的就是第一个区别:对于字符串中的\n如何处理?
教材中说,文本模式中,在存储\n时要转化为\r\n,读取文件时进行逆转换。二进制模式时,则不进行转换。这是在操作系统是Windows的条件下。
首先我们要知道回车和换行是不相同的,Windows中文字另起一行内存表示为<回车><换行>对应\r\n,而Linux、Unix中则是单单一个<换行>对应\n。Mac中则是一个<回车>对应\r
C语言起源于Unix的产生,对于文件中的另起一行,Unix采用单个\n表示。所以我们通常在输出一个短话想换行时加一个\n就可以了,Windows也是如此。到了数据从内存到硬盘上进行存储时,对于unix来说,\n照样是\n。而Windows为了防止读取时混乱必须转换为\r\n。Mac呢,就是\r。
这就是第一区别,这个区别是体现在fopen第二个参数,跟你使用文本模式的函数还是二进制模式的函数根本不相关!你可以做一个实验,使用二进制模式的函对于同样的字符串:”Hello\n”,当fopen使用w参数写入文件,无论是fwrite还是fprintf都会对\n会进行转换,而使用wb参数则都不进行转换。
2、
两种不同模式的函数
打开文件后,要进行数据写入。
教材中说,使用文本模式打开文件,就要用fprintf写入数据,使用二进制模式打开文件,就要用fwrite写入数据。
其实你用文本模式打开文件,一个字符串,fprintf、fwrite都能写入文件,写入还都是一样的数据。使用两类函数的区别其实在于数字的处理上。
对于一个数字5,你用fprintf写入,将把数字5转换为字符5,将其对应的ASCII编码存入存储器,占用1个字节。但实际上数字5就是数字5,对应2进制101,整形占用4个字节。fwrite则将这个数字在内存中占用的4个字节全部原样写入到硬盘中,占4个字节。
而同样对于一段字符串”Hello”,使用ASCII编码对于fprintf和fwrite都能原样写到硬盘中。
同样对于这个区别,你仍然能做个实验,对于一个int型数字5,你如何用fprintf和fwrite写入到硬盘中,他们对应的十六进制码是多少?对于一段字符串你再用两个函数分别写到硬盘中,你看看对应的十六进制码是什么。这个实验跟你用fopen如何指定第二个参数无关。
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-01-30
这个是为了打印,增加的判断,为保证程序健壮性很需要如此累赘
打印\r将会影响文件倒序打印的效果,putchar打印eof(一般是-1),我也没试过,但肯定是非正常输出。
所以增加这两个判断,是为了避免异常及保证打印效果
虽然-1把eof除外,谁也不知道是否输入的文件就是一个正常文件
int
fseek(
file
*stream,
long
offset,
int
origin
);
第一个参数stream为文件指针
第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:
seek_set:
文件开头
seek_cur:
当前位置
seek_end:
文件结尾
在c语言中,用函数getc(fgetc)从文件读取字符。getc、fgetc用法相同。
getc的调用形式:ch=getc(fp);此处的fp是文件指针;函数功能是从文件指针指向的文件读入一个字符,并把它作为函数值返回给字符型变量ch。

C语言文本方式和二进制方式读写操作的区别
这就是第一区别,这个区别是体现在fopen第二个参数,跟你使用文本模式的函数还是二进制模式的函数根本不相关!你可以做一个实验,使用二进制模式的函对于同样的字符串:”Hello\\n”,当fopen使用w参数写入文件,无论是fwrite还是fprintf都会对\\n会进行转换,而使用wb参数则都不进行转换。2、 两种不同模...

C语言采用文本方式和二进制方式打开文件的区别分析
二进制读写直接将内存中的数据原封不动、不加转换地复制到磁盘文件上,读入也是直接讲磁盘中的内容读入到内存,效率比文本快多了

C语言采用文本方式和二进制方式打开文件的区别分析
同一个文件从磁盘读取文件到内存(程序数据区或者缓存区)时,两种方式下,内存中的内容一般不相同,这就是两种打开方式的实质性差别。这里要说一个背景,那就是在windows下,它会做一个处理,就是写文件时,换行符会被转换成回车,换行符存在磁盘文件上,而读磁盘上的文件时,它又会进行逆处理,就是...

C语言文件操作中,二进制操作与文本操作 有什么区别?
一个文件可以以文本模式或二进制模式打开,这两种的区别是:在文本模式中回车被当成一个字符'\/n',而二进制模式认为它是两个字符0x0D,0x0A;如果在文件中读到0x1B,文本模式会认为这是文件结束符,也就是二进制模型不会对文件进行处理,而文本方式会按一定的方式对数据作相应的转换。

c语言里面文本文件和二进制文件有什么区别
C 语言中文本文件和二进制文件的区别:Windows 平台中,程序中是 "\\n",对应的文件内容是 "\\r\\n";而二进制文件的写入和读取按其原样。例:定义 fp 是 Windows 平台中以文本文件形式打开的文件指针,则 fprintf(fp, "\\n"); 运行后,文件中多了 "\\r\\n"。Mac 平台中,程序中是 "\\n",...

c语言文本与二进制
对于其他类型,区别比较大。文本写入方式,其基于的是字符,所以其存储的字节一般是定长的,ASCII编码时,每个字符是8位,UNICODE编码时是16位。而二进制写入方式,是变长存储。比如存储一个int型数字123,文本写入方式就是存取三个字符,'1', '2', '3', 共占3个字节(ASCII编码)二进制写入方式,会...

C语言文件 "w+"与"wb+"区别
w+以纯文本方式读写,而wb+是以二进制方式进行读写。mode说明:w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失若不存在则建立该文件。wb 只写方式打开或新建一个二进制文件,只...

C语言文件中,“rb”和“r”有什么区别?
一、作用不同 1、rb:代表二进制文件,用来读写二进制文件。2、r:代表文本文件,用来读写文本文件。二、特点不同 1、rb:文件编码是变长的,灵活利用率要高,而译码要难一些,不同的二进制文件译码方式是不同的。2、r:是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。三、优劣不同 1...

C语言文本流和二进制流
二、流和文件 在C语言中流就是一种文件形式,它实际上就表示一个文件或设备(从广义上讲,设备也是一种文件)。把流当作文件总觉得不习惯,因而有人称这种和流等同的文件为流式文件,流的输入输出也称为文件的输入输出操作。当流到磁盘而成为文件时,意味着要启动磁盘写入操作,这样流入一个字符(文本流...

c语言中的文件类型只有
在C语言中,文件类型主要有两种:文本文件和二进制文件。1. 文本文件:以纯文本形式存储数据,并且通常可以被文本编辑器打开和编辑。文本文件中的数据是按照字符编码方式存储的。例如,以“.txt”为扩展名的文件就是一种文本文件。在C语言中,可以使用标准库函数来读写文本文件,如fopen、fclose、fread、...

相似回答