精华内容
下载资源
问答
  • 提到计算机,很多人都知道二进制二进制具体是用来干嘛的呢?是用来保存表示信息的,计算机里所有的信息,无论是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,而有些二进制文件的编码格式只有程序的开发者自己清楚,这样的文件对于普通的用户来说就几乎是保密的。

    以上

    展开全文
  • 然后再将二进制文件还原并存入a3.txt文件。 具体代码如下: #include #include #include #define NSIZE 8 void print_2(int val2); /***********文本文件转二进制**********/ void Text2Bin(const char* sIn,...
  • 从文件编码的方式来看,文件可分为ASCII码文件二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为...二进制文件是按二进制
  • 文本文件和二进制文件的差异和区别

    万次阅读 多人点赞 2018-05-16 11:11:20
    广义上的二进制文件包括文本文件,这里讨论的是狭义上的二进制文件文本文件的比较: 能存储的数据类型不同 文本文件只能存储char型字符变量。二进制文件可以存储char/int/short/long/float/……各种变量值。 每...

    广义上的二进制文件包括文本文件,这里讨论的是狭义上的二进制文件与文本文件的比较:

    1. 能存储的数据类型不同
      文本文件只能存储char型字符变量。二进制文件可以存储char/int/short/long/float/……各种变量值。
    2. 每条数据的长度
      文本文件每条数据通常是固定长度的。以ASCII为例,每条数据(每个字符)都是1个字节。进制文件每条数据不固定。如short占两个字节,int占四个字节,float占8个字节……
    3. 读取的软件不同
      文本文件编辑器就可以读写。比如记事本、NotePad++、Vim等。二进制文件需要特别的解码器。比如bmp文件需要图像查看器,rmvb需要播放器……
    4. 操作系统对换行符(‘\n’)的处理不同(不重要)
      文本文件,操作系统会对’\n’进行一些隐式变换,因此文本文件直接跨平台使用会出问题。
      在Windows下,写入’\n’时,操作系统会隐式的将’\n’转换为”\r\n”,再写入到文件中;读的时候,会把“\r\n”隐式转化为’\n’,再读到变量中。
      在Linux下,写入’\n’时,操作系统不做隐式变换。
      二进制文件,操作系统不会对’\n’进行隐式变换,很多二进制文件(如电影、图片等)可以跨平台使用。

    从存储方式来说,文件在磁盘上的存储方式都是二进制形式,所以,文本文件其实也应该算二进制文件。先从他们的区别来说,虽然都是二进制文件,但是二进制代表的意思不一样。打个比方,一个人,我们可以叫他的大名,可以叫他的小名,但其实都是代表这个人。二进制读写是将内存里面的数据直接读写入文本中,而文本呢,则是将数据先转换成了字符串,再写入到文本中。

    要弄明白二者的区别,需要知道文件的读写过程。以读文件为例,

    实际上是磁盘 》》 文件缓冲区》》应用程序内存空间这两个转化过程。我们说“文本文件和二进制文件没有区别”,实际上针对的是第一个过程;既然没有区别,那么打开方式不同,为何显示内容就不同呢?这个区别实际上是第二个过程造成的。

    文件实际上包括两部分,控制信息和内容信息。纯文本文件仅仅是没有控制格式信息罢了;

    实际上也是一种特殊的二进制文件。所以,我们很难区分二者的不同,因为他们的概念上不是完全互斥的。我们说文本文件是特殊的二进制文件,是因为文本文件实际上的解释格式已经确定了:ASCII或者unicode编码。文本文件的一个缺点是,它的熵往往较低,也就是说,其实本可以用更小的存储空间记录这些信息。比如,文本文件中的一个数字65536,需要用5个字节来存储;但是用二进制格式,采用int存储,仅仅需要2个字节。而二进制文件elf和bmp等,都往往有一个head,告诉你文件信息和解释方式。

    记事本支持文本文件而不支持二进制文件,所以如果你用记事本打开文本文件那么一切正常,如果打开的是二进制文件就会出现乱码。但也有不乱码的地方,你会注意到那些地方都是字符编码的,而对于int、double等类型所对应的值都是乱码的,这是由于记事本只能够识别字符类型,而无法识别其他类型。

    1、二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放,也就是说存放的是数据的原形式。

    2、文本文件是把数据的终端形式的二进制数据输出到磁盘上存放,也就是说存放的是数据的终端形式。

    字符数据本身在内存中就经过了编码,所以无论是二进制还是文本形式都是一样的,而对于非字符数据来说,例如inti=10;如果用二进制来进行存储的话为1010,但是如果需要用文本形式来进行存储的话就必须进行格式化编码(对1和0分别编码,即形式为‘1’和‘0’分别对应的码值)。



    一、文本文件与二进制文件的定义

    大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码。

    从上面可以看出文本文件基本上是定长编码的(也有非定长的编码如UTF-8)。而二进制文件可看成是变长编码的,因为是值编码嘛,多少个比特代表一个值,完全由你决定。大家可能对BMP文件比较熟悉,就拿它举例子吧,其头部是较为固定长度的文件头信息,前2字节用来记录文件为BMP格式,接下来的8个字节用来记录文件长度,再接下来的4字节用来记录bmp文件头的长度。

    二、文本文件与二进制文件的存取

    文本工具打开一个文件的过程是怎样的呢?拿记事本来说,它首先读取文件物理上所对应的二进制比特流,然后按照你所选择的解码方式来解释这个流,然后将解释结果显示出来。一般来说,你选取的解码方式会是ASCII码形式(ASCII码的一个字符是8个比特),接下来,它8个比特8个比特地来解释这个文件流。例如对于这么一个文件流”01000000_01000001_01000010_01000011”(下划线”_”,为了增强可读性手动添加的),第一个8比特”01000000”按ASCII码来解码的话,所对应的字符是字符”A”,同理其它3个8比特可分别解码为”BCD”,即这个文件流可解释成“ABCD”,然后记事本就将这个“ABCD”显示在屏幕上。

    事实上,世界上任何东西要与其他东西通信会话,都存在一个既定的协议,既定的编码。人与人之间通过文字联络,汉字“妈”代表生你的那个人,这就是一种既定的编码。但注意到这样一种情况,汉字“妈”在日本文字里有可能是你生下的那个人,所以当一个中国人A与日本B之间用“妈”这个字进行交流,出现误解就很正常的。用记事本打开二进制文件与上面的情况类似。记事本无论打开什么文件都按既定的字符编码工作(如ASCII码),所以当他打开二进制文件时,出现乱码也是很必然的一件事情了,解码和译码不对应嘛。例如文件流”00000000_00000000_00000000_00000001”可能在二进制文件中对应的是一个四字节的整数int 1,在记事本里解释就变成了”NULL_NULL_NULL_SOH”这四个控制符。

    文本文件的存储与其读取基本上是个逆过程。而二进制文件的存取显然与文本文件的存取差不多,只是编/解码方式不同而已。

    三、文本文件与二进制文件的优缺点

    因为文本文件与二进制文件的区别仅仅是编码上不同,所以他们的优缺点就是编码的优缺点,这个找本编码的书来看看就比较清楚了。一般认为,文本文件编码基于字符定长,译码容易些;二进制文件编码是变长的,所以它灵活,存储利用率要高些,译码难一些(不同的二进制文件格式,有不同的译码方式)。关于空间利用率,想想看,二进制文件甚至可以用一个比特来代表一个意思(位操作),而文本文件任何一个意思至少是一个字符。

    在windows下,文本文件不一定是一ASCII来存贮的,因为ASCII码只能表示128的标识,你打开一个txt文档,然后另存为,有个选项是编码,可以选择存贮格式,一般来说UTF-8编码格式兼容性要好一些.而二进制用的计算机原始语言,不存贮兼容性. 很多书上还认为,文本文件的可读性要好些,存储要花费转换时间(读写要编译码),而二进制文件可读性差,存储不存在转换时间(读写不要编解码,直接写值).这里的可读性是从软件使用者角度来说的,因为我们用通用的记事本工具就几乎可以浏览所有文本文件,所以说文本文件可读性好;而读写一个具体的二进制文件需要一个具体的文件解码器,所以说二进制文件可读性差,比如读BMP文件,必须用读图软件。

    而这里的存储转换时间应该是从编程的角度来说的,因为有些操作系统如windows需要对回车换行符进行转换(将”\n”,换成”\r\n”,所以文件读写时,操作系统需要一个一个字符的检查当前字符是不是”\n”或”\r\n”).这个在存储转换在Linux操作系统中并不需要,当然,当在两个不同的操作系统上共享文件时,这种存储转换又可能出来。



    文本文件是一种计算机文件,它是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。

    特别的是,文本文件是指以ASCII码方式(也称文本方式)存储的文件,更确切地说,英文、数字等字符存储的是ASCII码,而汉字存储的是机内码。文本文件中除了存储文件有效字符信息(包括能用ASCII码字符表示的回车、换行等信息)外,不能存储其他任何信息。

    文本文件是一种由若干行字符构成的计算机文件。文本文件存在于计算机文件系统中。通常,通过在文本文件最后一行后放置文件结束标志来指明文件的结束。文本文件是指一种容器,而纯文本是指一种内容。文本文件可以包含纯文本。一般来说,计算机文件可以分为两类:文本文件和二进制文件。

    只含有ASCII字符的文本文件可以在Unix、Macintosh、Microsoft Windows、DOS和其它操作系统之间自由交互,而其它格式的文件是很难做到这一点的。但是,在这些操作系统中,换行符并不相同,处理非ASCII字符的方式也不一致。

    .txt是包含极少格式信息的文字文件的扩展名。.txt格式并没有明确的定义,它通常是指那些能够被系统终端或者简单的文本编辑器接受的格式。任何能读取文字的程序都能读取带有.txt扩展名的文件,因此,通常认为这种文件是通用的、跨平台的。

    在英文文本文件中,ASCII字符集是最为常见的格式,而且在许多场合,它也是默认的格式。对于带重音符号的和其它的非ASCII字符,必须选择一种字符编码。在很多系统中,字符编码是由计算机的区域设置决定的。常见的字符编码包括支持许多欧洲语言的ISO 8859-1。

    由于许多编码只能表达有限的字符,通常它们只能用于表达几种语言。Unicode制定了一种试图能够表达所有已知语言的标准,Unicode字符集非常大,它囊括了大多数已知的字符集。Unicode有多种字符编码,其中最常见的是UTF-8,这种编码能够向后兼容ASCII,相同内容的的ASCII文本文件和UTF-8文本文件完全一致。

    微软的MS-DOS和Windows采用了相同的文本文件格式,它们都使用CR和LF两个字符作为换行符,这两个字符对应的ASCII码分别为13和10。通常,最后一行文本并不以换行符(CR-LF标志)结尾,包括记事本在内的很多文本编辑器也不在文件的最后添加换行符。

    大多数Windows文本文件使用ANSI、OEM或者Unicode编码。Windows所指的ANSI编码通常是1字节的ISO-8859编码,不过对于像中文、日文、朝鲜文这样的环境,需要使用2字节字符集。在过渡至Unicode前,Windows一直用ANSI作为系统默认的编码。而OEM编码,也是通常所说的MS-DOS代码页,是IBM为早期IBM个人电脑的文本模式显示系统定义的。在全屏的MS-DOS程序中同时使用了图形的和按行绘制的字符。新版本的Windows可以使用UTF-16LE和UTF-8之类的Unicode编码。

    由于结构简单,文本文件被广泛用于记录信息。它能够避免其它文件格式遇到的一些问题。此外,当文本文件中的部分信息出现错误时,往往能够比较容易的从错误中恢复出来,并继续处理其余的内容。文本文件的一个缺点是,它的熵往往较低,也就是说,可以用较小的存储空间记录这些信息。

    文本文件基本上是定长编码的(也有非定长的编码如UTF-8),基于字符,每个字符在具体编码中是固定的,ASCII码是8个比特的编码,UNICODE一般占16个比特。而二进制文件可看成是变长编码的,因为是值编码,多少个比特代表一个值,完全由自己决定。

    广义的二进制文件即指文件,由文件在外部设备的存放形式为二进制而得名。狭义的二进制文件即除文本文件以外的文件。

    每个字符由一个或多个字节组成,每个字节都是用的-128—127之间的部分数值来表示的,也就是说,-128——127之间还有一些数据没有对应任何字符的任何字节。如果一个文件中的每个字节的内容都是可以表示成字符的数据,我们就可以称这个文件为文本文件。文本文件只是二进制文件中的一种特例,为了与文本文件相区别,人们又把除了文本文件以外的文件称为二进制文件,由于很难严格区分文本文件和二进制文件的概念,所以我们可以简单地认为,如果一个文件专门用于存储文本字符的数据,没有包含字符以外的其他数据,我们就称之为文本文件,除此之外的文件就是二进制文件。

    为什么要使用二进制文件。原因大概有三个:

    第一是二进制文件比较节约空间,这两者储存字符型数据时并没有差别。但是在储存数字,特别是实型数字时,二进制更节省空间;第二个原因是,内存中参加计算的数据都是用二进制无格式储存起来的,因此,使用二进制储存到文件就更快捷。如果储存为文本文件,则需要一个转换的过程。在数据量很大的时候,两者就会有明显的速度差别了。第三,就是一些比较精确的数据,使用二进制储存不会造成有效位的丢失。



    转自:

    1. 文本文件和二进制文件的差异和区别
    2. 文本文件与二进制文件区别
    展开全文
  • 详解文本文件和二进制文件区别

    千次阅读 多人点赞 2019-06-12 15:49:01
    网上关于文本文件二进制文件的文章很多,但遗憾的是,这些文章讲得都比较散。下面我将结合所查到的资料,从多个角度...大家都知道计算机的存储在物理上是二进制的,所以文本文件二进制文件区别并不是物理上的...

    转自:https://blog.csdn.net/renyongwang1988/article/details/8050506

    网上关于文本文件与二进制文件的文章很多,但遗憾的是,这些文章讲得都比较散。下面我将结合所查到的资料,从多个角度谈谈文本文件与二进制文件。

     

     一、文本文件与二进制文件的定义

    大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。

    简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。

    从上面可以看出文本文件基本上是定长编码的,基于字符嘛,每个字符在具体编码中是固定的,ASCII码是8个比特的编码,UNICODE一般占16个比特。而二进制文件可看成是变长编码的,因为是值编码嘛,多少个比特代表一个值,完全由你决定。大家可能对BMP文件比较熟悉,就拿它举例子吧,其头部是较为固定长度的文件头信息,前2字节用来记录文件为BMP格式,接下来的8个字节用来记录文件长度,再接下来的4字节用来记录bmp文件头的长度。。。大家可以看出来了吧,其编码是基于值的(不定长的,2、4、8字节长的值都有),所以BMP是二进制文件。

     

    二、文本文件与二进制文件的存取

    文本工具打开一个文件的过程是怎样的呢?拿记事本来说,它首先读取文件物理上所对应的二进制比特流(前面已经说了,存储都是二进制的),然后按照你所选择的解码方式来解释这个流,然后将解释结果显示出来。一般来说,你选取的解码方式会是ASCII码形式(ASCII码的一个字符是8个比特),接下来,它8个比特8个比特地来解释这个文件流。例如对于这么一个文件流"01000000_01000001_01000010_01000011"(下划线'_',是我为了增强可读性,而手动添加的),第一个8比特'01000000'按ASCII码来解码的话,所对应的字符是字符'A',同理其它3个8比特可分别解码为'BCD',即这个文件流可解释成“ABCD”,然后记事本就将这个“ABCD”显示在屏幕上。

    事实上,世界上任何东西要与其他东西通信会话,都存在一个既定的协议,既定的编码。人与人之间通过文字联络,汉字“妈”代表生你的那个人,这就是一种既定的编码。但注意到这样一种情况,汉字“妈”在日本文字里有可能是你生下的那个人,所以当一个中国人A与日本B之间用“妈”这个字进行交流,出现误解就很正常的。用记事本打开二进制文件与上面的情况类似。记事本无论打开什么文件都按既定的字符编码工作(如ASCII码),所以当他打开二进制文件时,出现乱码也是很必然的一件事情了,解码和译码不对应嘛。例如文件流'00000000_00000000_00000000_00000001'可能在二进制文件中对应的是一个四字节的整数int1,在记事本里解释就变成了"NULL_NULL_NULL_SOH"这四个控制符。

    文本文件的存储与其读取基本上是个逆过程,不再累述。而二进制文件的存取显然与文本文件的存取差不多,只是编/解码方式不同而已,也不再叙述。

     

    三、文本文件与二进制文件的优缺点

    因为文本文件与二进制文件的区别仅仅是编码上不同,所以他们的优缺点就是编码的优缺点,这个找本编码的书来看看就比较清楚了。一般认为,文本文件编码基于字符定长,译码容易些;二进制文件编码是变长的,所以它灵活,存储利用率要高些,译码难一些(不同的二进制文件格式,有不同的译码方式)。关于空间利用率,想想看,二进制文件甚至可以用一个比特来代表一个意思(位操作),而文本文件任何一个意思至少是一个字符.

    很多书上还认为,文本文件的可读性要好些,存储要花费转换时间(读写要编译码),而二进制文件可读性差,存储不存在转换时间(读写不要编解码,直接写值).这里的可读性是从软件使用者角度来说的,因为我们用通用的记事本工具就几乎可以浏览所有文本文件,所以说文本文件可读性好;而读写一个具体的二进制文件需要一个具体的文件解码器,所以说二进制文件可读性差,比如读BMP文件,必须用读图软件.而这里的存储转换时间应该是从编程的角度来说的,因为有些操作系统如windows需要对回车换行符进行转换(将'\n',换成'\r\n',所以文件读写时,操作系统需要一个一个字符的检查当前字符是不是'\n'或'\r\n').这个在存储转换在Linux操作系统中并不需要,当然,当在两个不同的操作系统上共享文件时,这种存储转换又可能出来(如Linux系统和Windows系统共享文本文件)。关于这个转换怎样进行,我将在下一篇文章《Linux文本文件与Windows文本文件间的转换》给出^_^

     

    四、C的文本读写和二进制读写

    应该说C的文本读写与二进制的读写是一个编程层次上的问题,与具体的操作系统有关,所以"用文本方式读写的文件一定是文本文件,用二进制读写的文件一定是二进制文件"这类观点是错误的.下面的讲述非明确指出操作系统类型,都暗指windows.C的文本方读写与二进制读写的差别仅仅体现在回车换行符的处理上.文本方式写时,每遇到一个'\n'(0AH换行符),它将其换成'\r\n'(0D0AH,回车换行),然后再写入文件;当文本读取时,它每遇到一个'\r\n'将其反变化为'\n',然后送到读缓冲区.正因为文本方式有'\n'--'\r\n'之间的转换,其存在转换耗时.二进制读写时,其不存在任何转换,直接将写缓冲区中数据写入文件.

     总地来说,从编程的角度来说,C中文本或二进制读写都是缓冲区与文件中二进制流的交互,只是文本读写时有回车换行的转换.所以当写缓冲区中无换行符'\n'(0AH),文本写与二进制写的结果是一样的,同理,当文件中不存在'\r\n'(0DH0AH)时,文本读与二进制读的结果一样.

    下面给出一个小程序来证明前面的观点.

     

    1、编写如下程序.该程序将字符串"12\n3"分别以文本方式和二进制方式写入test1和test2,然后再以文本方式读test1,以二进制方式读test2.

     

    [cpp] view plaincopy

    1. #include   
    2.    
    3. int main()  
    4. {  
    5. FILE*fp_text,*fp_binary;  
    6. charwrite_buf[4]={'1','2','\n','3'};  
    7. charread_buf_text[6],read_buf_binary[6];  
    8. intread_count_text,read_count_binary;  
    9. //未检测打开是否失败   
    10. fp_text=fopen("test1","wt+");  
    11. fp_binary=fopen("test2","wb+");  
    12. fwrite(write_buf,4,1,fp_text);  
    13. fwrite(write_buf,4,1,fp_binary);  
    14.    
    15. //fflush(fp_text);   
    16. //fflush(fp_binary);   
    17.    
    18. fseek(fp_text,0L,SEEK_SET);//fseek附带了fflush功能   
    19. fseek(fp_binary,0L,SEEK_SET);//   
    20.    
    21. read_count_text=fread(read_buf_text,sizeof(char),5,fp_text);  
    22. read_count_binary=fread(read_buf_binary,sizeof(char),5,fp_binary);  
    23.    
    24. //加'\0',便于打印字符串   
    25. read_buf_text[read_count_text]='\0';  
    26. read_buf_binary[read_count_binary]='\0';  
    27.    
    28. printf("InTextMode:read_count=%d,string=%s\n",read_count_text,read_buf  
    29. _text);  
    30. printf("InBinaryMode:read_count=%d,string=%s\n",read_count_binary,read  
    31. _buf_binary);  
    32.    
    33. fclose(fp_text);  
    34. fclose(fp_binary);  
    35.    
    36. return0;  
    37. }  
    38.    
     
    1. #include

    2.  
    3. int main()

    4. {

    5. FILE*fp_text,*fp_binary;

    6. charwrite_buf[4]={'1','2','\n','3'};

    7. charread_buf_text[6],read_buf_binary[6];

    8. intread_count_text,read_count_binary;

    9. //未检测打开是否失败

    10. fp_text=fopen("test1","wt+");

    11. fp_binary=fopen("test2","wb+");

    12. fwrite(write_buf,4,1,fp_text);

    13. fwrite(write_buf,4,1,fp_binary);

    14.  
    15. //fflush(fp_text);

    16. //fflush(fp_binary);

    17.  
    18. fseek(fp_text,0L,SEEK_SET);//fseek附带了fflush功能

    19. fseek(fp_binary,0L,SEEK_SET);//

    20.  
    21. read_count_text=fread(read_buf_text,sizeof(char),5,fp_text);

    22. read_count_binary=fread(read_buf_binary,sizeof(char),5,fp_binary);

    23.  
    24. //加'\0',便于打印字符串

    25. read_buf_text[read_count_text]='\0';

    26. read_buf_binary[read_count_binary]='\0';

    27.  
    28. printf("InTextMode:read_count=%d,string=%s\n",read_count_text,read_buf

    29. _text);

    30. printf("InBinaryMode:read_count=%d,string=%s\n",read_count_binary,read

    31. _buf_binary);

    32.  
    33. fclose(fp_text);

    34. fclose(fp_binary);

    35.  
    36. return0;

    37. }

     

    2、该程序在VC6.0下编译运行,显示结果如下(追忆"\\"及其右边内容是我手动加的注释

    ):

     InTextMode:read_count=4,string=12

     

    3//文本方式读test1,读到的字符与原先写入test1的

    字符一样

    InBinaryMode:read_count=4,string=12

    3//二进制方式读test1,读到的字符与原先写入test1

    的字符一样

    3.用记事本打开test1和test2,结果如下:

    test1的内容:

     

    12

     

    3//文本方式写入的,有换行效果,参看下面的4

     

    test2的内容

     

    123//二进制方式写入的,无换行效果(记事本对"\r\n"之外的控制字符串无显示效果),参看下面的4

     

    4、用vc6.0以Binary方式(二进制方式)打开test1和test2,结果如下(用其他二进制读

    写软件也可以) 

     

    test1的内容

     

    31320D0A33//十六进制,5个字节,比写入缓冲区多了一个字节,在'\n'(0AH)前插了一个'\r'(0DH)

     

    test2的内容

     

    31320A33//十六进制,4个字节,与写入缓冲区的值一致.

     

    5、总结

    从4可以看出,文本方式写时,存在'\n'->'\r\n'的转换,而二进制方式无转换.又从2和4可以推出,文本方式读时存在'\r\n'->至'\n'的转换,而二进制方式无转换.有兴趣的读者可以,以二进制方式读test1或以文本方式读test2,看会出现什么效果

     

    6.补充说明

     上述说明仅适用于windows,在linux中文本方式的读写与二进制方式的读写无差别,不存在回车换行间的转换.这样当直接在windows和linux中共享文件时,将会出现与回车换行相关的问题.

    展开全文
  • 文本文件和二进制文件区别Here you will learn about difference between text file and binary file. 在这里,您将了解文本文件和二进制文件之间的区别。 Text Files 文字档案 Text files are special subset ...

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

    Here you will learn about difference between text file and binary file.

    在这里,您将了解文本文件和二进制文件之间的区别。

    Text Files

    文字档案

    Text files are special subset of binary files that are used to store human readable characters as a rich text document or plain text document. Text files also store data in sequential bytes but bits in text file represents characters.

    文本文件是二进制文件的特殊子集,用于将人类可读字符存储为RTF文档或纯文本文档。 文本文件还按顺序字节存储数据,但文本文件中的位代表字符。

    Text files are less prone to get corrupted as any undesired change may just show up once the file is opened and then can easily be removed.

    文本文件不容易损坏,因为一旦打开文件,任何不想要的更改都可能会显示出来,然后可以轻松将其删除。

    Text files are of two types:

    文本文件有两种类型:

    • Plain text files: These files store End of Line (EOL) marker at the end of each line to represent line break and an End of File (EOF) at the end of the file to represent end of file.

      纯文本文件:这些文件在每行的末尾存储行尾(EOL)标记以表示换行符,并在文件的末尾存储文件末尾(EOF)来表示文件的末尾。

    • Rich text files: These files also follow the same schema as the plain text files but may also store text related information like text colour, text style, font style etc.

      富文本文件:这些文件也遵循与纯文本文件相同的模式,但也可以存储与文本相关的信息,例如文本颜色,文本样式,字体样式等。

    Because of simple and standard format to store data, text files are one of the most used file formats for storing textual data and are supported in many applications.

    由于存储数据的简单和标准格式,文本文件是用于存储文本数据的最常用的文件格式之一,并且在许多应用程序中都受支持。

    Binary File

    二进制文件

    Binary file are those typical files that store data in the form of sequence of bytes grouped into eight bits or sometimes sixteen bits. These bits represent custom data and such files can store multiple types of data (images, audio, text, etc) under a single file.

    二进制文件是那些典型的文件,它们以字节序列的形式存储数据,这些字节被分为八位或有时十六位。 这些位代表自定义数据,此类文件可以在单个文件下存储多种类型的数据(图像,音频,文本等)。

    Binary file can have custom file formats and the developer, who designs these custom file formats, converts the information, to be stored, in bits and arranges these bits in binary file so that they are well understood by the supporting application and when needed, can easily be read by the supporting application.

    二进制文件可以具有自定义文件格式,开发人员可以设计这些自定义文件格式,以位的形式转换要存储的信息,并以二进制文件的形式排列这些位,以便支持应用程序很好地理解它们,并在需要时可以易于被支持的应用程序阅读。

    One most common example of binary file is image file is .PNG or .JPG. If one tries open these files using a text editor then, he/she may get unrecognizable characters, but when opened using the supporting image viewer, the file will be shown as a single image. This is because the file is in binary format and contains data in the form of sequence of bytes. When the text editor tries to read these bytes and tries to convert bits into characters, they get undesired special characters and display it to the user.

    二进制文件的最常见示例是图像文件是.PNG或.JPG。 如果尝试使用文本编辑器打开这些文件,则他/她可能会收到无法识别的字符,但是当使用支持的图像查看器打开文件时,该文件将显示为单个图像。 这是因为文件是二进制格式,并且包含字节序列形式的数据。 当文本编辑器尝试读取这些字节并尝试将位转换为字符时,它们将获得不需要的特殊字符并将其显示给用户。

    Binary files also store file information like file name, file format, etc., which may be included in the file as header to the file and is visible even when the file is opened in a text editor.

    二进制文件还存储文件信息,如文件名,文件格式等,这些信息可以作为文件的标题包含在文件中,即使在文本编辑器中打开文件也可以看到。

    Since binary files store data in sequential bytes, a small change in the file can corrupt the file and make it unreadable to the supporting application.

    由于二进制文件按顺序字节存储数据,因此文件中的微小更改可能会损坏文件并使支持应用程序无法读取。

    Difference between Text File and Binary File

    Image Source

    图片来源

    文本文件与二进制文件–文本文件和二进制文件之间的区别 (Text File vs Binary File – Difference between Text File and Binary File)

    Text FileBinary File
    Bits represent character.Bits represent a custom data.
    Less prone to get corrupt as changes reflect as soon as the file is opened and can easily be undone.Can easily get corrupted, even a single bit change may corrupt the file.
    Can store only plain text in a file.Can store different types of data (image, audio, text) in a single file.
    Widely used file format and can be opened using any simple text editor.Developed especially for an application and may not be understood by other applications.
    Mostly .txt and .rtf are used as extensions to text files.Can have any application defined extension.
    文本文件 二进制文件
    位代表字符。 位代表自定义数据。
    一旦文件打开,更改就反映出来,因此不容易损坏,可以轻松撤消。 容易损坏,即使只是一点点更改也可能损坏文件。
    只能在文件中存储纯文本。 可以在一个文件中存储不同类型的数据(图像,音频,文本)。
    广泛使用的文件格式,可以使用任何简单的文本编辑器打开。 专为某个应用程序开发,其他应用程序可能无法理解。
    通常,.txt和.rtf用作文本文件的扩展名。 可以具有任何应用程序定义的扩展名。

    Comment below if you have queries related to difference between text file and binary file.

    如果您对文本文件和二进制文件之间的差异有疑问,请在下面评论。

    翻译自: https://www.thecrazyprogrammer.com/2018/05/difference-between-text-file-and-binary-file.html

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

    展开全文
  • 二进制文件srcfile 转换成文本文件 targetfile,16进制显示。 二进制文件srcfile 转换文本文件 targetfile,16进制显示。 二进制文件转换文本文件 targetfile,16进制显示。 二进制文件转换文本文件,16进制显示...
  • 文本文件和二进制文件读写区别,C语言
  • 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 1、ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为: ASC码: ...
  • 文本文件和二进制文件的判别

    千次阅读 2019-06-26 15:17:03
    作为程序员,从第一次接触编程开始,就知道了文件的两大类别:文本文件和二进制文件。但是,如何定义判别这两类文件,在我的知识体系了,却一直是模糊的。直觉上,用文本方式读写的文件一定是文本文件,用二进制...
  • 什么文本文件和二进制文件? i. 文本文件和二进制文件都是计算机文件,在计算机中的物理存储都是二进制的, 没有本质的区别;真正的区别是在逻辑上的,也就是编码层次上的差异。 ii. 文本文件是以ASCII码、...
  • 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、...
  • 掌握C语言二进制文件读写方式; 掌握CPP文本文件读写方式; 掌握CPP二进制文件读写方式; 二:C语言文本文件读写 1. 文本文件写入 //采用C模式对Txt进行写出 void TxtWrite_Cmode() { //准备数据 int index[50] ;...
  • 十六进制的文本文件,转为十六进制格式的二进制文件。 从第一个有效字符开始,每2个有效字符(即0~F)输出一个格式化字节,"0x"、"\r\n"、空格等字符会被跳过。
  • 广义上的二进制文件包括文本文件,这里讨论的是狭义上...
  • 在当前目录创建一个文件myfile.txt,对该文件具有读写权限
  • 这篇文章主要介绍了 PHP 读取 txt 文本文件并分页显示的方法 ,涉及 php 操作文件的技 巧,具有一定参考借鉴价值 ,需要的朋友可以参考下 本文实例讲述了 PHP 读取 txt 文本文件并分页显示的方法 分享给大家供大家参考 ...
  • 文本文件和二进制文件详解(转)

    千次阅读 2017-05-26 22:19:38
    转自:...2)二进制文件:这类文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们,只有通过相应的软件才能将其显示出来。二进制文件一般是可执行程序、图形、图像
  • 目录以文本格式二进制格式打开...那么,文本文件和二进制文件有什么区别呢? 两种格式的解码区别 根据我们以往的经验,文本文件通常用来保存肉眼可见的字符,比如 .txt 文件、.c 文件、.dat 文件等,用文本编辑器打开
  • 主要介绍了java判断一个文件是否为二进制文件的方法,涉及java针对文件的读取及编码判断技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • (1)文本文件 文本文件存储的是常规字符串,由若干文本行组成,通常每行以换行符'\n'结尾。常规字符串是指记事本或其他文本编辑器能正常显示、编辑并且人类能够直接阅读理解的字符串,如...
  • 不同的二进制文件需要不同的软件来打开,例如BMP文件,需要一个读图的软件来打开才能看到里面保存的图像,MP3文件需要一个播放器软件才能听到里面的音频。而文本文件只需要记事本就可以打开查看里面的内容。 2 ...
  • 稍微了解C程序设计的人都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?对于编程人员来说,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开...
  • 文本文件二进制文件区别

    千次阅读 2018-11-15 13:50:18
    ... 1)文本文件:这类文件以文本的ASCII码...2)二进制文件:这类文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们,只有通过相应的软件才能将其显示出来。二进制文件一般是可执行程序、图形、图像...
  • 文本文件转换二进制文件
  • Python读写文本文件和二进制文件的方法及注意事项

    万次阅读 多人点赞 2019-03-17 10:08:51
    文件两种,文本文件和二进制文件。读写文本文件比较简单,也在这里简单说一下;读写二进制文件用到了struct库,涉及一些大端小端、字节填充等概念,稍微有点复杂。 文件打开关闭 在读写文件之前,需要打开文件,...
  • 依次读出文件中的字节,如果存在'/0'则是二进制文件, 否则为ASCII文本文件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 358,120
精华内容 143,248
关键字:

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