精华内容
下载资源
问答
  • 在学习了 fopen()函数...文本文件和二进制文件区别根据我们以往的经验,文本文件通常用来保存肉眼可见的字符,比如.txt文件、.c文件、.dat文件等,用文本编辑器打开这些文件,我们能够顺利看懂文件的内容。二进制...
    在学习了 fopen() 函数后,我们知道它的第二个参数是一个字符串,用来表示文件打开方式。如果字符串中出现b,则表示以二进制方式打开文件;如果字符串中出现t,或者两者都不出现,则表示以文本方式打开文件。

    文本文件和二进制文件的区别

    根据我们以往的经验,文本文件通常用来保存肉眼可见的字符,比如.txt文件、.c文件、.dat文件等,用文本编辑器打开这些文件,我们能够顺利看懂文件的内容。二进制文件通常用来保存视频、图片、程序等不可阅读的内容,用文本编辑器打开这些文件,会看到一堆乱码,根本看不懂。但是从物理上讲,二进制文件和字符文件并没有什么区别,它们都是以二进制的形式保存在磁盘上的数据。我们之所以能看懂文本文件的内容,是因为文本文件中采用的是 ASCII、UTF-8、GBK 等字符编码,文本编辑器可以识别出这些编码格式,并将编码值转换成字符展示出来。而二进制文件使用的是 mp4、gif、exe 等特殊编码格式,文本编辑器并不认识这些编码格式,只能按照字符编码格式胡乱解析,所以就成了一堆乱七八糟的字符,有的甚至都没见过。如果我们新建一个 mp4 文件,给它写入一串字符,然后再用文本编辑器打开,你一样可以读得懂,有兴趣的读者可以自己试试。总起来说,不同类型的文件有不同的编码格式,必须使用对应的程序(软件)才能正确解析,否则就是一堆乱码,或者无法使用。

    fopen() 中的文本方式和二进制方式

    在C语言中,二进制方式很简单,读取文件时,会原封不动的读出文件的全部內容,写入数据时,也是把缓冲区中的內容原封不动的写到文件中。文本方式和二进制方式并没有本质上的区别,只是对于换行符的处理不同。C语言程序将\n作为换行符,类 UNIX/Linux 系统在处理文本文件时也将\n作为换行符,所以程序中的数据会原封不动地写入文本文件中,反之亦然。但是 Windows 系统却不同,它将\r\n作为文本文件的换行符。在 Windows 系统中,如果以文本方式打开文件,当读取文件时,程序会将文件中所有的\r\n转换成一个字符\n。也就是说,如果文本文件中有连续的两个字符是\r\n,则程序会丢弃前面的\r,只读入\n当写入文件时,程序会将\n转换成\r\n写入。也就是说,如果要写入的内容中有字符\n,则在写入该字符前,程序会自动先写入一个\r因此,如果用文本方式打开二进制文件进行读写,读写的内容就可能和文件的内容有出入。总起来说,对于 Windows 平台,为了保险起见,我们最好用"t"来打开文本文件,用"b"来打开二进制文件。对于 Linux 平台,使用"r"还是"b"都无所谓,既然默认是"r",那我们什么都不写就行了。

    cca8c02cefe705daa9964c9df68c87d1.png

    展开全文
  • 在学习了 fopen()函数...文本文件和二进制文件区别根据我们以往的经验,文本文件通常用来保存肉眼可见的字符,比如.txt文件、.c文件、.dat文件等,用文本编辑器打开这些文件,我们能够顺利看懂文件的内容。二进制...
    在学习了 fopen() 函数后,我们知道它的第二个参数是一个字符串,用来表示文件打开方式。如果字符串中出现b,则表示以二进制方式打开文件;如果字符串中出现t,或者两者都不出现,则表示以文本方式打开文件。

    文本文件和二进制文件的区别

    根据我们以往的经验,文本文件通常用来保存肉眼可见的字符,比如.txt文件、.c文件、.dat文件等,用文本编辑器打开这些文件,我们能够顺利看懂文件的内容。二进制文件通常用来保存视频、图片、程序等不可阅读的内容,用文本编辑器打开这些文件,会看到一堆乱码,根本看不懂。但是从物理上讲,二进制文件和字符文件并没有什么区别,它们都是以二进制的形式保存在磁盘上的数据。我们之所以能看懂文本文件的内容,是因为文本文件中采用的是 ASCII、UTF-8、GBK 等字符编码,文本编辑器可以识别出这些编码格式,并将编码值转换成字符展示出来。而二进制文件使用的是 mp4、gif、exe 等特殊编码格式,文本编辑器并不认识这些编码格式,只能按照字符编码格式胡乱解析,所以就成了一堆乱七八糟的字符,有的甚至都没见过。如果我们新建一个 mp4 文件,给它写入一串字符,然后再用文本编辑器打开,你一样可以读得懂,有兴趣的读者可以自己试试。总起来说,不同类型的文件有不同的编码格式,必须使用对应的程序(软件)才能正确解析,否则就是一堆乱码,或者无法使用。

    fopen() 中的文本方式和二进制方式

    在C语言中,二进制方式很简单,读取文件时,会原封不动的读出文件的全部內容,写入数据时,也是把缓冲区中的內容原封不动的写到文件中。文本方式和二进制方式并没有本质上的区别,只是对于换行符的处理不同。C语言程序将\n作为换行符,类 UNIX/Linux 系统在处理文本文件时也将\n作为换行符,所以程序中的数据会原封不动地写入文本文件中,反之亦然。但是 Windows 系统却不同,它将\r\n作为文本文件的换行符。在 Windows 系统中,如果以文本方式打开文件,当读取文件时,程序会将文件中所有的\r\n转换成一个字符\n。也就是说,如果文本文件中有连续的两个字符是\r\n,则程序会丢弃前面的\r,只读入\n当写入文件时,程序会将\n转换成\r\n写入。也就是说,如果要写入的内容中有字符\n,则在写入该字符前,程序会自动先写入一个\r因此,如果用文本方式打开二进制文件进行读写,读写的内容就可能和文件的内容有出入。总起来说,对于 Windows 平台,为了保险起见,我们最好用"t"来打开文本文件,用"b"来打开二进制文件。对于 Linux 平台,使用"r"还是"b"都无所谓,既然默认是"r",那我们什么都不写就行了。

    898242ae59e9b8a31389d9bb45ae7731.png

    展开全文
  • 提到计算机,很多人都知道二进制二进制具体是用来干嘛的呢?是用来保存表示信息的,计算机里所有的信息,无论是CPU正在执行的指令还是你保存在硬盘里的小姐姐,归根结底都是像下面这样的01序列: ...

    本文首发于知乎,原文链接:
    https://www.zhihu.com/question/19971994/answer/570107874


    回答较长,但是保证有趣。( • ̀ω•́ )✧

    这要从文件的本质开始说起,首先,我们用一个简单的例子来演示一下计算机处理文件的过程。
    提到计算机,很多人都知道二进制,二进制具体是用来干嘛的呢?是用来保存和表示信息的,计算机里所有的信息,无论是CPU正在执行的指令还是你保存在硬盘里的小姐姐,归根结底都是像下面这样的01序列:

    0100100001100101011011000110110001101111

    但是当看到这样的序列,不要说一般的电脑使用者,就是程序员也不可能很快地认出这是什么。实际应用中,对于这样的二进制序列,我们往往会做如下处理:

    1. 以4位为一组,将序列分成若干组。对于上面的序列,分割之后如下:

    0100 1000 0110 0101 0110 1100 0110 1100 0110 1111

    1. 现在我们可以把这些二进制序列看做是10个二进制数,每个数有4位。之后我们把这10个数转换成16进制。转换之后如下:

    4 8 6 5 6 c 6 c 6 f

    因为4位的二进制数所能表示的最大的16进制数也就只有f,所以这样得到的16进制数可以保证只有1位,现在我们得到了10个16进制的数字,而且每个只有1位,看起来是不是清爽多了?

    截止到现在为止,我们所做的工作对于任意格式的文件来说都是通用的,下面假设这个文件是个文本文件,我们来手动解析这个文本文件。

    1. 将10个16进制数字强行合并成2位的16进制数,如下:

    48 65 6c 6c 6f

    1. 现在,我们得到了5个2位的16进制数,将他们转换为10进制(其实在这里也可以不做转换,转换成10进制只是为了符合我们的习惯)

    72 101 108 108 111

    1. 现在,我们得到了5个无比亲切的10进制数,上过小学甚至是幼儿园的孩子都可以大声地把这5个数字读出来。然后,我们搬出一件驰名中外的东西——ASCII码表.

    在这里插入图片描述

    当我们对照ASCII码表把上面的5个数字翻译出来后,我们终于得到了一个语文老师也能够看懂的单词

    Hello

    把上面的过程稍作简化,从4位二进制数直接向ASCII码表对应的字符翻译,就可以大致认为是计算机读取文本文件的原理,实际上,由于ASCII字符集能表示的字符已经远远无法满足人们的使用,现在使用的往往是诸如Unicode这样的大型字符集,但是基本原理和使用ASCII字符集别无二致,只是能表示的字符多了一些,需要的二进制位长了一些。

    有些优秀的同学可能会问,那我第5步的时候为什么就一定要用ASCII码表或者Unicode表来查,而不是别的什么表呢?这个问题就引出了文件类型的概念。当你打开一个扩展名为txt的文件,或者虽然扩展名不是txt,但是你使用文本编辑器强行打开时,文本编辑器就会认为这是一个文本文件,然后使用文本文件对应的规则来“翻译”这些二进制序列。

    可想而知,如果这个文件确实是文本文件,那么解析出来就是人类可以看懂的信息,如果这个文件本来就不是一个文本文件,那么强行解析出来就会变成杂乱无章的字符组合,这样的字符组合就有一个为人们熟知的名字——乱码。

    比如我把上面举例用的字符串在16进制编辑模式下随意改为123456789a,使用记事本打开就是这样的:

    这就好比美国人对一个不懂英语的中国人说:Good morning!,中国人按照中文的发音去理解英语,听到的就是“孤的猫宁”,孤的猫宁是什么意思?总之不是它原来的意思。

    同样,对于其他类型的文件,比如音频、图片、视频,计算机会用不同的解码方式去解读他们包含的二进制序列,虽然乍一看都是0101,但是因为“翻译”方式的不同,他们就可以表示不同类型的信息。文件之所以要加扩展名,就是为了让计算机能够知道,在读取这个文件的时候应该使用哪本“字典”来进行翻译,这样才能够呈现出它本来的信息。

    回到题主的问题,其实在编程的概念里,只要是使用文本编辑器打开可以展现出人类可读(human-readable)的信息的文件,都可以算作宽泛的文本文件,如txt,html,css,java,xml等等,这些文件的编码都符合某种文字编码规范,如上文提到的ASCII、Unicode、还有以前中文中经常使用的GB2312;反之,如果文件的编码不符合任意一种文字编码规范,使用文本编辑器打开只能看到乱码,就可以认为它属于二进制文件。要想打开二进制文件,就必须要知道该文件所对应的编码规范,有些二进制文件使用通用的规范进行编码,比如常见的图片格式JPEG,音频格式MPEG-3,视频格式MPEG-4,而有些二进制文件的编码格式只有程序的开发者自己清楚,这样的文件对于普通的用户来说就几乎是保密的。

    以上

    展开全文
  • 以文本格式和二进制...那么,文本文件和二进制文件有什么区别呢?根据我们以往的经验,文本文件通常用来保存肉眼可见的字符,比如 .txt 文件、.c 文件、.dat 文件等,用文本编辑器打开这些文件,我们能够顺利看懂...

    以文本格式和二进制格式打开文件,到底有什么区别?

    我们知道,open() 函数第二个参数是一个字符串,用于指定文件的打开方式,如果该字符串中出现 b,则表示以二进制格式打开文件;反之,则以普通的文本格式打开文件。

    那么,文本文件和二进制文件有什么区别呢?

    根据我们以往的经验,文本文件通常用来保存肉眼可见的字符,比如 .txt 文件、.c 文件、.dat 文件等,用文本编辑器打开这些文件,我们能够顺利看懂文件的内容。而二进制文件通常用来保存视频、图片、音频等不可阅读的内容,当用文本编辑器打开这些文件,会看到一堆乱码,根本看不懂。

    实际上,从数据存储的角度上分析,二进制文件和文本文件没有区别,它们的内容都是以二进制的形式保存在磁盘中的。

    我们之所以能看懂文本文件的内容,是因为文本文件中采用的是 ASCII、UTF-8、GBK 等字符编码,文本编辑器可以识别出这些编码格式,并将编码值转换成字符展示出来。而对于二进制文件,文本编辑器无法识别这些文件的编码格式,只能按照字符编码格式胡乱解析,所以最终看到的是一堆乱码。

    open()的文本格式和二进制格式

    使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同。

    在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行符),当以文本格式读取文件时,会将 "\r\n" 转换成 "\n";反之,以文本格式将数据写入文件时,会将 "\n" 转换成 "\r\n"。这种隐式转换换行符的行为,对用文本格式打开文本文件是没有问题的,但如果用文本格式打开二进制文件,就有可能改变文本中的数据(将 \r\n 隐式转换为 \n)。

    而在 Unix/Linux 系统中,默认的文件换行符就是 \n,因此在 Unix/Linux 系统中文本格式和二进制格式并无本质的区别。

    总的来说,为了保险起见,对于 Windows平台最好用 b 打开二进制文件;对于 Unix/Linux 平台,打开二进制文件,可以用 b,也可以不用。

    编程帮,一个分享编程知识的公众号。跟着站长一起学习,每天都有进步。

    通俗易懂,深入浅出,一篇文章只讲一个知识点。

    文章不深奥,不需要钻研,在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

    文章不涉及代码,不烧脑细胞,人人都可以学习。

    当你决定关注「编程帮」,你已然超越了90%的程序员!

    微信扫描二维码关注

    展开全文
  • 目录以文本格式和二进制格式打开...那么,文本文件和二进制文件有什么区别呢? 两种格式的解码区别 根据我们以往的经验,文本文件通常用来保存肉眼可见的字符,比如 .txt 文件、.c 文件、.dat 文件等,用文本编辑器打开
  • 那这两种模式之间有什么区别,是不是使用文本模式打开的文件就只能使用文本函数比如fprintf来操作,而使用二进制打开的文件就只能使用二进制函数比如fwrite来操作呢? 答案是否定的。C里面之所以有文本模式和二进制...
  • 那么,文本文件和二进制文件有什么区别呢? 根据我们以往的经验,文本文件通常用来保存肉眼可见的字符,比如 .txt 文件、.c 文件、.dat 文件等,用文本编辑器打开这些文件,我们能够顺利看懂文件的内容。而二进制...
  • 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为: ASC码: 00110101 ...
  • 什么是流(stream)? 流是程序输入或输出的一个连续的字节序列,设备(例如鼠标、键盘、磁盘、屏幕、调制解调器打印机)的输入输出都是用流来处理的。在C语言中,所有的流均以文件的形式出现----不一定是...
  • 原文请见 深入:文本格式和二进制格式到底有什么不同?“信息”在机器层面是通过0和1的排列方式来体现的。可是这些0和1如何变成我们在windows环境下的记事本中看到的文本或者图片查看器中看到的图片呢?这里面就有一...
  • 那就是二进制文件和文本文件中的内容到底是怎么读写的?我们为什么打开二进制文件看到的是一些乱码? 由于今天的时间充足,编找了一点相关资料,并总结了一下。 文件分为两类:文本文件二进制文件。 ...
  • 文本格式和二进制格式的区别

    千次阅读 2012-09-25 17:43:51
    关于二进制文件和文本文件,他们之间到底有什么不同呢?在这篇文章里,我用自己的方式来解读!不对之处,望各位牛人多指点,或联系我jiadongkai@gmail.com.  我们都知道,在机器层面,所有的信息都是0/1,所有的...
  • fgets() 有局限性,每次最多...对于 Windows 系统,使用 fread() 和 fwrite() 时应该以二进制的形式打开文件,具体原因我们已在《文本文件和二进制文件到底有什么区别》一文中进行了说明。fread() 函数用来从指定文...
  • 目录什么是文件文件的操作文件类型二进制文件代码文本文件代码文件缓冲区观察缓冲区所带来的现象fflush 函数与缓冲区认识缓冲区文件指针文件的打开关闭对比用 r w 的方式打开一个不存在文件对比W a 的 读写...
  • ====================================================到底什么是二进制文件和文本文件,它们有什么区别?  首先文件无非就是一堆二进制数的集合;八个二进制成一个字节,也就是一堆字节的集合;  文本文件...
  • 6.12 既然数组引用会退化为指针,如果array是数组,那么array&array又有什么区别呢? 6.13 如何声明一个数组的指针? 动态数组分配 6.14 如何在运行时设定数组的大小?怎样才能避免固定大小的数组? 6.15 我...
  • 1.13 对于用户定义类型,typedef #define有什么区别? 7 1.14 我似乎不能成功定义一个链表。我试过typedef struct{char *item; NODEPTR next;}* NODEPTR; 但是编译器报了错误信息。难道在C语言中结构不能包含...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    1.20 const char *p、char const *pchar *const p有什么区别? 10 复杂的声明 11 1.21 怎样建立理解非常复杂的声明?例如定义一个包含N个指向返回指向字符的指针的函数的指针的数组? 11  1.22 如何声明...
  • BIN:二进制文件 BINHex:苹果的一种编码格式 BMP:Windows或OS/2位图文件 BOOK:Adobe FrameMaker Book文件 BOX:Lotus Notes的邮箱文件 BPL:Borlard Delph 4打包库 BSP:Quake图形文件 BUN:CakeWalk 声音...
  • TortoiseSVN

    2009-11-28 19:31:36
    因为文本文件可以合并,而二进制文件则无法合并。 所以Subversion从1.2开始支持一种叫Lock-Modify-Unlock (锁定-修改-解锁)的版本控制模型。 在Windows下最常用的版本控制软件Visual Source Safe(VSS)就是采用...
  • o 7.9 既然数组引用会蜕化为指针, 如果 arr 是数组, 那么 arr &arr 又有什么区别呢 ? o 7.10 我如何声明一个数组指针 ? o 7.11 我如何在运行期设定数组的大小 ? 我怎样才能避免固定大小的数组 ? o 7.12 ...
  • 可是一大堆的概念术语往往让人望而生畏,很多朋友问我:XML到底有什么用,我们是否需要学习它?我想就我个人学习过程的心得经验,写一篇比较全面的介绍文章。首先有两点是需要肯定的:  第一:XML肯定是未来的...
  • 五.Linux操作系统上有什么应用?.....................................................................................4 六.在那里可以找到讨论区?..........................................................
  • 你必须知道的495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    3.9 ++i i++ 有什么区别? . . . . . . . . . . . . . . . . . . . . . . 15 3.10 如果我不使用表达式的值, 我应该用++i 或i++ 来自增一个变量 吗? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....
  • 6.3 类、对象成员的使用方法及区别 56 6.3.1 声明一个类 56 6.3.2 命名习惯 57 6.3.3 定义一个对象 57 6.3.4 类与对象的区别 57 6.3.5 对象与成员的关系 57 6.3.6 不要给类赋值 58 6.3.7 对象只能调用类中...

空空如也

空空如也

1 2
收藏数 34
精华内容 13
关键字:

文本文件和二进制文件到底有什么区别