求雷神3:雷神3诸神黄昏在线观看百度云网盘高清资源分享一下

C语言采用文本方式和二进制方式打开文件的区别分析
来源:本站原创&
这篇文章主要介绍了C语言采用文本方式和二进制方式打开文件的区别分析,有助于读者更好的理解文本文件与二进制文件的原理,需要的朋友可以参考下
稍微了解C程序设计的人都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?对于编程人员来说,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开这个文件,用什么函数读写这个文件(读写函数),怎么判断读到这个文件结尾等。
具体分析如下:
一、以哪种方式打开一个文件:
ANSI C规定了标准输入输出函数库,用 fopen()函数打开文件。fopen()函数的调用方式一般为:
fp=fopen(文件名,使用文件方式);
使用文件方式见下表:
使用文件方式
"r"(只读)
为输入打开一个文本文件
"w"(只写)
为输出打开一个文本文件
"a"(追加)
为追加打开一个文本文件
"rb"(只读)
为输入打开一个二进制文件
"wb"(只写)
为输出打开一个二进制文件
"ab"(追加)
为追加打开一个二进制文件
"r+"(读写)
为读/写打开一个文本文件
"w+"(读写)
为读/写创建一个文本文件
"a+"(读写)
为读/写打开一个文本文件
"rb+"(读写)
为读/写打开一个二进制文件
"wb+"(读写)
为读/写创建一个二进制文件
"ab+"(读写)
为读/写打开一个二进制文件
同一个文件从磁盘读取文件到内存(程序数据区或者缓存区)时,两种方式下,内存中的内容一般不相同,这就是两种打开方式的实质性差别。
这里要说一个背景,那就是在windows下,它会做一个处理,就是写文件时,换行符会被转换成回车,换行符存在磁盘文件上,而读磁盘上的文件时,它又会进行逆处理,就是把文件中连续的回车,换行符转换成换行符。
因此,在读取一个磁盘文件时,文本方式读取到文件内容很有可能会比二进制文件短,因为文本方式读取要把回车,换行两个字符变成一个字符,相当于截短了文件。但是为什么仅仅是可能呢?因为可能文本中不存在连着的45,42这两个字节(45是CR回车的ASCII码,42是换行符CL的ASCII码),也就不存在“截短”操作了,因此读到的内容是一样的。
具体的来说,文件文件(以文本方式写的),最好以文本方式读。二进制文件(以二进制方式写的),最好以二进制方式读。不然可能会不正确。
二、以什么函数读写文件
数据怎么在磁盘上写不是由文件打开方式决定的,而是由写函数决定的。数据怎么从磁盘上读也不是由文件打开方式决定的,而是由读函数决定的。
上面说的数据怎么写是指,一种类型的变量是怎么存的?比如int 12,可以直接存12的二进制码(4个字节),也可以存字符1,字符2.
数据怎么读的是指,我要读一个int变量,是直接读sizeof(int)个字节,还是一个字符一个字符的读,直到读到的字符不是数字字符。
C里面有两组文件读写函数恰好支持上面两种方式的读写:
1.fread(buffer,size,count,fp),fwrite(buffer,size,count,fp)。用来读写一个数据块。它对应的是第一种存储方式。直接按类型的字节长度指定读写的字节数。
2.fprintf函数和fscanf函数.它对应的是第二种读写方式。即以字符的方式读写。(fprintf函数、fscanf函数与printf函数、scanf函数的作用相仿,都是格式化读写函数。fprintf和fscanf函数的读写对象是磁盘文件,而printf和scanf函数的读写对象是终端。)
它们的一般调用格式为:
fprintf(文件指针,格式字符串,输出列表);
fscanf (文件指针,格式字符串,输入列表);
三、怎么判断文件尾
在C语言,或更精确地说成 C标准函式库中,有一个特别的字符EOF(stdio.h中这个定义 #define EOF (-1) ),它表示:文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志。
但是,C语言中,当把数据以二进制形式存放到文件中时,就会有-1值的出现,此时不能采用EOF作为二进制文件的结束标志。为解决这个问题,ANSI C提供一个feof函数,用来判断文件是否结束。如果遇到文件结束,函数feof(fp)的值为1,否则为0.
feof函数既可用以判断二进制文件是否结束,也可以用以判断文本文件是否结束。但是要注意feof用以判断文本文件尾时,如果代码编写不当,可能会把文本文中中的文件结束符EOF也读取出来了;具体可以参考/view/656648.htm中feof函数的用法。
四、知道一个文件是文本文件,还是二进制文件,更多的“提醒”我们,应该选择哪种读写函数。
正如前文所说的,数据怎么存不是由文件打开方式决定的,而是由读写函数决定的。
比如说,我们以二进制文件的方式打开一个文件(实际上只是指明了要进行换行符的转换),它更多的是代表一种理念(虚的):我“希望”这个文件里面的数据是这样的,int类型占4字节,char占1个字节。这种模式下,我用fread(buffer,size0f(int),1,fp)读取一个int到int变量中。
这里需要记住:
我们在对一个文件进行操作以前,首先,我们要清楚这个文件到底是文本文件还是二进制文件。文件文件用文本方式打开,二进制文件用二进制方式打开
如果我们要操作一个二进制文件,那么我们就以二进制方式打开(理论上也可以以文件方式打开,但是如果写的二进制数据里面有45时,会转化成45,42存储,如前文所述。这是很有可能发生的)。同时读写的时候用fread,fwrite这两个函数。
如果我要操作一个文本文件,那么我们就以文本的方式打开(理论上也可以以二进制方式打开,但是不保险)。同时读写的时候用读写字符的那些函数fprintf,fscanf ,fgetc,fputc,putw,getw,fgetc,fputs.
这篇文章主要介绍了C语言采用文本方式和二进制方式打开文件的区别分析,有助于读者更好的理解文本文件与二进制文件的原理,需要的朋友可以参考下 稍微了解C程序设计的人都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?对于编程人员来说,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开这个文件,用什么函数读写这个文件(读写函数),怎么判断读到这个文件结尾等. 具体分析如下: 一.以哪种方式打开一个文件: ANSI C规定了标准输入输出函数
centos系统默认的行为,有很多地方与ubuntu操作习惯不一样,其中一个最让我不能忍受的就 是,每次双击文件夹,都会在一个新窗口打开,而且打开的文件夹不像 windows那样,有后退/向上按钮,也没有文件夹的具体路径.如果一个文件夹的路径很深,则需要打开n多的窗口才能找到最终想要的. 后来研究了一下,发现这个问题也可以通过设置改变一下,方法如下: 1,打开一个文件夹 2,编辑 - 首选项 - 行为,勾选&总是在浏览器窗口打开&,点击关闭. 这样,双击打开文件夹窗口的模样就与之前大不
这篇文章主要介绍了go语言中使用timer的常用方式,实例分析了三种常用的使用timer的方法,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例总结了go语言中使用timer的常用方式.分享给大家供大家参考.具体分析如下: 下面三段代码(A,b,C)的功能都是在5分钟后执行指定的函数的go语言代码: // (A) time.AfterFunc(5 * time.Minute, func() { fmt.Printf(&expired&) } // (B) create a Time
R 语言数据输入的几种方式简介,希望能对大家有所帮助 $使用键盘输入数据 mydata&-data.frame(age=numeric(0)) edit(mydata) $从带分隔符的文本文件中导入数据 (.csv文件) 你可以使用read.table()从带分隔符的文本文件中导入数据.此函数可读入一个表格格式 的文件并将其保存为一个数据框.其语法如下: mydataframe&-read.table(file,header=logical_value,sep=&delimiter&
Visual C#读取文件方式有很多种,下面介绍第一种,行读取方式. 1.假设我们是通过一个按钮(openFile)促发一个文件选择对话框(openFileDialog),然后读取文件内容并显示到一个文本框(source)中,如果要演示,大家可以自己添加这两个控件. 2.下面我们就开始编写以行方式读取文件的方法,名字叫readFileByLine(),没有参数. private string readFileByLine() //这个方法将一行方式读取文件 { string fileText=s
这篇文章主要介绍了php实现以只读方式打开文件的方法,实例分析了php中fopen函数的功能及使用技巧,需要的朋友可以参考下 本文实例讲述了php实现以只读方式打开文件的方法.分享给大家供大家参考.具体分析如下: php中可以通过fopen()打开一个文件,第二个参数设置为&r&表示已只读方式打开,函数返回一个文件句柄,其它函数就可以通过这个文件句柄对文件进行不同方式的读取 &?php $file = fopen(&/tmp/file.txt&, &
php获取远程图片的两种:CURL方式和sockets方式获取远程图片,需要的朋友可以参考下. 方式1:sockets $a = &http://jb51.net/content/uploadfile/201106/thum-f3ccdd27d5a7e3e2c2095243.jpg&; $local = 'socket1.gif'; $aa = getImg($a,$local); /* *@ 完整的图片地址 *@ 要存储的文件名 */ fu
这篇文章主要介绍了c语言操作文本的基本使用方法,需要的朋友可以参考下 字符读写函数 :fgetc和fputc 字符串读写函数:fgets和fputs 数据块读写函数:freed和fwrite 格式化读写函数:fscanf和fprinf 1.字符读写: fgetc函数的功能是从指定的文件中读一个字符,函数调用的形式为: 字符变量=fgetc(文件指针): fputc函数的功能是把一个字符写入指定的文件中,函数调用的形式为: fputc(字符量,文件指针): 2.字符串读写 读字符串函数fgets
目前我知道的JAVA解析XML的方式有:DOM, SAX, StAX:如果选用这几种,感觉还是有点麻烦:如果使用:JAXB(Java Architecture for XML Binding),个人觉得太方便了 先简单说下前三种方式: DOM方式:个人理解类似.net的XmlDocument,解析的时候效率不高,占用内存,不适合大XML的解析: SAX方式:基于事件的解析,当解析到xml的某个部分的时候,会触发特定事件,可以在自定义的解析类中定义当事件触发时要做得事情:个人感觉一种很另类的方式,
这篇文章主要介绍了c语言打开文件函数使用方法,需要的朋友可以参考下 ANSI C规定文件打开用函数fopen,关闭为fclose. 1.调用方式通常为: FILE * fp=fopen(文件名, 打开方式); 2.参数说明: 文件名: 形如&myfile.dat&.&F:\data\myfile.dat&等等; 打开方式: &r&(只读) 为输入打开一个文本文件 &w&(只写) 为输出打开一个文本文件 &a&q
昨天写一个读取bmp文件的小程序,出现了一个bug,但是不清楚到底是什么原因.程序是要读取一个bmp文件然后保存成Bmp文件,我发现读取的时候有小错误,保存的时候也有.保存Bmp的时候居然文件大小比原来的文件大小多了3个字节,这三个字节的差异让图片的内容有了巨大的变化. 后来自己检查才发现自己打开文件时候用的是:fopen(filename,&r+&) 而改成 fopen(filename,&wb&)后程序终于完全正常.补了一下c语言文件操作的课,才恍然大悟.默认的
这篇文章主要介绍了C++采用openfilename打开文件对话框用法实例,是C++文件操作中非常实用的技巧,需要的朋友可以参考下 本文实例讲述了C++采用openfilename打开文件对话框用法,分享给大家供大家参考.具体方法如下: 这里需要注意,有的时候会因为没设置nMaxFile,而一直不出现对话框. 具体功能代码如下: char szFileName[MAX_PATH]={0}; OPENFILENAME openFileName = {0}; openFileName.lStruct
这篇文章主要介绍了C语言中自动隐式转换与类型强制转换实例分析,需要的朋友可以参考下 本文通过一个C程序实例对C语言中自动隐式转换与类型强制转换的注意点进行深入分析,详情如下: 先看一个C程序: #include&stdlib.h& #include&stdio.h& #include&conio.h& double proc(int q){ double sum,t;//本例的关键就在这几个变量的类型上 sum = 2.0; while(sum&=q
以下是对.Net下二进制形式的文件(图片)的存储与读取进行了详细的分析介绍,需要的朋友可以过来参考下 .Net下图片的常见存储与读取凡是有以下几种: 存储图片:以二进制的形式存储图片时,要把数据库中的字段设置为Image数据类型(SQL Server),存储的数据是Byte[]. 1.参数是图片路径:返回Byte[]类型: public byte[] GetPictureData(string imagepath) { ////根据图片文件的路径使用文件流打开,并保存为byte[] FileSt
这篇文章主要介绍了linux下采用shell脚本实现批量为指定文件夹下图片添加水印的方法,需要的朋友可以参考下 要实现linux下采用shell脚本批量为指定文件夹下图片添加水印,首先需要安装imagemagick: CentOS上安装: yum install ImageMagick -y Debian上安装: apt-get install ImageMagick -y 脚本: #!/bin/bash for each in /要处理的图片目录/*{.jpg,.gif} s=`du -k $
这篇文章主要介绍了C#采用HttpWebRequest实现保持会话上传文件到HTTP的方法,很实用的功能,需要的朋友可以参考下 本文实例讲述了C#采用HttpWebRequest实现保持会话上传文件到HTTP的方法,在项目开发中有一定的实用价值,具体方法如下: 一.前言: 这篇文章翻译来自madmik3 写在 CodeProject 上的文章,原标题为: C#'s WebClient.UploadFile with more functionality. 二.正文: 我们使用 WebReques
我们把自己的程序发布到app store,但是不能保证每一个用户都是从app store下载官方app,也不能保证每一个用户都不越狱. 换句话说,我们无法保证程序运行环境在MAC管控策略下就绝对的安全. 所以,在有些情况下,尤其是和钱有关系的app,我们有必要在和服务器通信时,让服务器知道客户端到底是不是官方正版的app. 何以判断自己是不是正版app呢?hackers们破解你的app,无非就2个地方可以动,1个是二进制,1个是资源文件. 二进制都重新编译过了自然肯定是盗版-- 有些低级的hac
这篇文章主要介绍了Go语言创建.初始化数组的常见方式,实例汇总了Go语言操作数组的常见技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例总结了Go语言创建.初始化数组的常见方式.分享给大家供大家参考.具体分析如下: Go语言的语法很灵活,以下展示了创建并初始化数组的多种方式: //数组初始化的各种方式 func arraySliceTest0201() { //创建数组(声明长度) var array1 = [5]int{1, 2, 3} fmt.Printf(&array1--- ty
前言 上篇博文(关于c语言结构体偏移的一点思考)对c语言中结构体偏移做了一些思考,发现博文中还有一些小的问题,没有描述的足够清楚,所以才萌生了本篇博文的想法. 为什么不直接将本篇博文作为上篇博文的一个&注&呢?主要有以下方面的原因,一是使用一篇独立的博文能够更好的阐述问题,从而彻底的理解它:二是上篇博文的篇幅已经比较长,考虑到读者的耐心,所以一篇博文不适合过长的篇幅:三是这个问题可以作为一个独立的主题来探讨,方便查阅:最后本着单一职责的原则,每篇博文讨论一个特定的主题,对于主题的粒度大
30万条,有ID列但无主键,在要搜索的&分类&字段上建有非聚集索引 数据库: 30万条,有ID列但无主键,在要搜索的&分类&字段上建有非聚集索引 过程T-SQL: /* 用户自定义函数:执行时间在毫秒左右 CREATE FUNCTION [dbo].[gethl] (@types nvarchar(4)) RETURNS table AS return select 书名 from 图书三十万条 Where 分类 Like '%'+@types+'21ic官方微信-->
后使用快捷导航没有帐号?
请完成以下验证码
查看: 3033|回复: 11
以二进制方式打开的文件如何直接另存为C语言的格式
&&已结帖(0)
主题帖子积分
主题帖子积分
专家等级:结帖率:91%
主题帖子积分
比如用uEdit软件打开*.MID,现在要将看到的全部二进制文件转换成C语言数组并编译做成代码,放入项目中,有什么好软件能实现,请大家介绍介绍.不是将文件扩展名改成C存盘,大这不要误会了.是存成如下格式myMusicData&=&{0x11,0x22.......},就是11,22&这些16进数.
, , , , , , ,
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:64%打赏:3.00受赏:0.00
主题帖子积分
好象没见过...自己写个小程序吧。
打开文件,读数据,然后格式化输出到一个文件中就行拉,俺做fft时的那些表格就是这样自动生成的。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:91%
主题帖子积分
实在找不到,就只能自己写,不过还是希望找个现成的
WinHex就很牛,能将硬盘的MBR,DBR,等等全部直接倒成C格式的数组存盘,只是那软件不针对文件,专门整对扇区数据.
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
鼓捣香肠太懒了,写个小工具也不要10分钟啊
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
助理工程师, 积分 1436, 距离下一级还需 564 积分
助理工程师, 积分 1436, 距离下一级还需 564 积分
主题帖子积分
专家等级:结帖率:66%
主题帖子积分
助理工程师, 积分 1436, 距离下一级还需 564 积分
助理工程师, 积分 1436, 距离下一级还需 564 积分
/tools/downtools.asp?id=3
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 7, 距离下一级还需 43 积分
实习生, 积分 7, 距离下一级还需 43 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 7, 距离下一级还需 43 积分
实习生, 积分 7, 距离下一级还需 43 积分
节能环保遥控器
遥控器是日程生活中接触最多的电子产品之一,人人几乎都会用过,而且会经常使用。日常家电产品离不开遥控器。遥控器的能量来源就是电池,目前普遍应用的是价格较低的碱性钮扣电池及碳性干电池两种。目前市面上的家电遥控器,基本上都使用两节AA/AAA干电池。按目前中国约有家庭3.48亿户算,每年每户至少使用8节以上的AA/AAA干电池用于家用电器遥控器上,中国每年消耗用于家电遥控器普通干电池约为28亿节。&&&&最近几年,市场上面开始流行一些新能源遥控器,例如光能遥控器就是被很多人第一个想象到的环保遥控器。可是大家又不是真真考虑过这个光能遥控器的可行性。光能的产生需要有光电转化的材料,这种被用来做光能遥控器的材料,平均使用寿命也就才5年。五年后就需要丢弃,这无疑也是对环境的一个污染,这些材料同样需要很长时间才会被分解。&&&&其实真真要达到环保的效果,不一定一开始就要一刀切,减少污染也是一个方向,减少遥控器电池的使用和消耗量,也是一个环保的方向。想一想,如果每个遥控器由原来使用两个AA/AAA电池变为只使用一个AA/AAA电池,而且一个电池的遥控器使用寿命等于两个电池遥控器的使用寿命,那么给环保带来的效益就是28亿节/2,直接节省了14亿节电池的损害。可能会有人问,一个电池怎么可能和两个电池寿命会一样,就算一样,这种遥控器是不是又要增加什么其他条件,浪费其他物质资源。对于这些问题,答案是一个电池寿命一定一样,而且制作遥控器的所有物质不变。变的,就是遥控器核心部件的科学含量。低电压核心遥控器IC的出现,使原来遥控器产品功耗更加低,同时又保持了普通遥控器的性能、寿命和工作效果。值得关注的是,使用了一个电池的环保遥控器,对于遥控器的生产成本,只是增加了1块钱人民币不到,但是这1块钱,就连一个电池也买不到。已经量产和被部分大品牌家电商使用的一个电池遥控器IC,都是由ETA公司生产,卓之科电子EXCELLTECH为了让地球环境更加美丽,正在努力的推广一个电池的遥控器产品理念,希望有一天可以让遥控器走出传统,减少电池排放。如果有对一个电池遥控器感兴趣的生产商或者开发商,可以EMAIL:QQ_或索取相关资料。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:91%
主题帖子积分
谢谢秋婷,非常好用
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:91%
主题帖子积分
俺的习惯是有现成的,就尽量不自己做.浪费精力不值.其二,找来也可做参考,看看别人有什么不足,自已做也有个起点,别人的东西要采取拿来主义.
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
初级技术员, 积分 96, 距离下一级还需 4 积分
初级技术员, 积分 96, 距离下一级还需 4 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
初级技术员, 积分 96, 距离下一级还需 4 积分
初级技术员, 积分 96, 距离下一级还需 4 积分
版主啊,具体怎么操作啊!能详细讲解下不?
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
Table extractor转换工具,怎么网上面没有啊,楼主提供个下载链接啊
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:91%
主题帖子积分
原来的软件链接打不开,刚好要用,找到自己的老贴,发现这个问题,还是上传软件在咱坛子里保险,翻出硬盘找到这个软件上传,方便以后回头找来用。
本帖子中包含更多资源
才可以下载或查看,没有帐号?
以VS1003B和山景SOC芯片为背景,倾心研制数字化语音录放产品.
排忧邮箱:xg_2004_
得意之作是做了个AVR高压编程器,用起来爽歪歪,
串口MP3录放音模块,全面进入数字录放音时代
主题帖子积分
助理工程师, 积分 1156, 距离下一级还需 844 积分
助理工程师, 积分 1156, 距离下一级还需 844 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
助理工程师, 积分 1156, 距离下一级还需 844 积分
助理工程师, 积分 1156, 距离下一级还需 844 积分
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
技术奇才奖章
人才类勋章
永恒之光奖章
等级类勋章
技术导师奖章
人才类勋章
时间类勋章
坚毅之洋流
发帖类勋章
核心会员奖章
等级类勋章
时间类勋章
社区建设奖章
等级类勋章
技术新星奖章
人才类勋章
热门推荐 /2  在学习C语言读取文件的时候,首先学习到的是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如何指定第二个参数无关。
  文本模式和二进制模式其实就2个简单的区别,抓住这两个核心完全能搞懂两种模式的不同。
  对于第一个区别完全是因为操作系统的差异导致,C作为一个跨平台的语言必须要设计一种方法解决这个跨平台的问题,如果3个平台对于另起一行这个操作统一是不存在这第一个区别的
  对于第二个区别,一切数据的存储都是二进制1、0存储,只不过对于数字,既可以认为是一个数字,也可以认为是一个字符,这就是产生第二个区别的原因
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:16461次
排名:千里之外
原创:14篇
(1)(1)(1)(3)(1)(1)(6)(2)(1)}

我要回帖

更多关于 雷神3诸神黄昏在线观看 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信