精华内容
下载资源
问答
  • 1、C语言中缺省是按照文本方式打开文件。...(3)二进制文件是包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件。一般是可执行程序、图形、图象、声音等等文件。 (4)文本文件(也称为ASCII文件):它

    1、C语言中缺省是按照文本方式打开文件。

    2、二进制文件和文本文件
    (1)文件是在计算机内存中以二进制表示的数据在外部存储介质上的另一种存放形式。
    (2)文件通常分为二进制文件和文本文件。
    (3)二进制文件是包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件。一般是可执行程序、图形、图象、声音等等文件。
    (4)文本文件(也称为ASCII文件):它的每一个字节存放的是可表示为一个字符的ASCII代码的文件。它是以 “行”为基本结构的一种信息组织和存储方式的文件,可用任何文字处理程序阅读的简单文本文件。

    3、文本方式和二进制方式

    (1)按照文本方式(缺省情况下)往文件中写入数据时,一旦遇到换行字符(ASCII为10),则会转换为回车-换行(ASCII为13、10)。多写入了一个字符!在读取文件时,一旦遇到回车-换行的组合(即连续的ASCII 13、10),则会转换为换行字符(ASCII为10)。
    (2)当我们按照二进制方式往文件中写入数据,则将数据在内存中的存储形式原样输出到文件中。
    (3)在写入和读取文件时要保持一致。如果采用文本方式写入,应采用文本方式读取;如果采用二进制方式写入数据,在读取时也应采用二进制方式。
    (4)不管是文本文件还是二进制文件,如果统一采用二进制方式进行写入和读取,则是不会出错的。

    (5)不管是文本文件还是二进制文件,都可以采用二进制方式或者文本方式打开,然后进行写入或者读取。但是,对于二进制文件来说,如果以文本方式读取时,可能会出现一些问题。

    4、问题产生:给你一个整数,例如:98341,将这个整数保存到文件中,要求在以记事本程序打开该文件时,也显示98341。
           如果直接将98341写入文本文件中,然后再打开这个文件肯定看不到这个整数。因为对于文本文件来说,它的每一个字节存放都是可表示为一个字符得ASCII码。如果想在记事本中看到98341这个样子,实际上是得在记事本中看到“这几个字符相应的ASCII码转换后的字符”,也就是说,在记事本中看到的“98341”是五个字符,并不是整数:98341!
    文件实际上就是数据内存中的存储形式在外部存储介质上的另一种存放形式。当以记事本打开上述文件,也就是以文本方式打开该文件时,该文件中存储的每一个字节的数据都要作为ASCII码进而转换为相应的字符,但是上述文件中的每一个字节的数据转换为字符之后又是不可读的,因此看到的就是乱码。

    直接int i=98341;fwrite(&i,4,1,file);这样只会输出乱码。

    解决办法:

    (1):

    FILE *file;
    file=fopen("1.txt","w");
    char *p="98341";
    fwrite(p,1,5,file);
    fclose(file);
    
    或者(2)
    FILE *file;
    file=fopen("1.txt","w");
    char ch[5];
    ch[0]='9';
    ch[1]='8';
    ch[2]='3';
    ch[3]='4';
    ch[4]='1';
    fwrite(ch,1,5,file);
    fclose(file);
    或者(3):我们在存储时去存储“98341”这五个字符的ASCII码(字符“0”的ASCII码是48)。
    FILE *pFile=fopen("3.txt","w");
    int i=98341;
    char ch[5];
    ch[0]=9+48;
    ch[1]=8+48;
    ch[2]=3+48;
    ch[3]=4+48;
    ch[4]=1+48;
    fwrite(ch,1,5,pFile);
    fclose(pFile);
    或者(4)利用itoa()函数将证书转换为字符串,然后将这个字符串写入文件。但是这种方法值涉及数字的保存,如果把数字和字符夹杂在一起,并要求以记事本打开时能看到数字,就不用itoa函数,就要将这些整数数字转换为ASCII码,然后在下写入文件。
    FILE *pFile=fopen("3.txt","w");
    int i=98341;
    char ch[5];
    itoa(i,ch,10);
    fwrite(ch,1,5,pFile);
    fclose(pFile);
    展开全文
  • 二进制文件、文本文件

    万次阅读 多人点赞 2018-08-11 14:19:21
    在windows上,用记事本就可以打开文本文件了,但要打开二进制文件需要对应的二进制文件解码器,因此,文本文件是更为大家所熟知的文件形式,而二进制文件的优点在于它的输入输出都省去了转换的过程,而且更省空间。...

    先说结论:

    二进制文件和文本文件都是按照二进制存储的,只不过文本文件是把一个字节一个字节解读成字符,而二进制文件可以任意定义解读方式。


    在windows上,用记事本就可以打开文本文件了,但要打开二进制文件需要对应的二进制文件解码器,因此,文本文件是更为大家所熟知的文件形式,而二进制文件的优点在于它的输入输出都省去了转换的过程,而且更省空间。

    文件的读写过程:

    磁盘— 文件缓冲区 — 应用程序的内存空间

    我们说的,“文本文件和二进制文件没有区别”,实际上针对的是第一个过程,那么打开方式不同,为何显示内容就不同呢?这个区别实际上是第二个过程造成的。

    我们说文本文件是特殊的二进制文件,是因为文本文件实际上的解释格式已经确定了:ASCII或者Unicode编码。这些都是针对文本的编码格式。二进制文件则可以有各种存储结构。

    举个实例:

    file = open('test.txt', 'wb')  # 创建test.txt文件
    file.write(b'\x41\x42')  # 直接向其写入十六进制数据0x41和0x42(字符串AB)
    file.close()  # 关闭文件(相当于保存)
    # 此时用任意文本编辑器打开test.txt,你可以看到字符串AB出现在屏幕上

    字符A和B在ASCII编码格式中对应的十六进制数字分别是0x41和0x42(二进制分别为1000001和1000010)。我可以直接创建一个文件,直接向里面写入十六进制数据0x41和0x42(注意是直接写入数据,不是一般的文本输入),保存之后使用一般的文本编辑器打开,我就能看到字符串AB显示在屏幕上了。


    文本文件是字符编码的文件,二进制文件是对值编码的文件。

    计算机在物理内存上面存放的都是二进制,所以文本文件和二进制文件的主要区别是在逻辑上的而不是物理上的。而从文件的编码方式来看,文件可以分为文本文件和二进制文件。文本文件是基于字符编码的文件,常见的有ASCII、Unicode等,二进制文件是基于值编码的文件,可以看成是变长编码,你可以根据自己的需要,决定多少个比特代表一个值。

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

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

    如果是需要频繁的保存和访问数据,那么应该采取二进制文件进行存放,这样可以节省存储空间和转换时间。

    如果需要频繁的向终端显示数据或从终端读入数据,那么应该采用文本文件进行存放,这样可以节省转换时间。

    这里写图片描述

    文本文件的打开方式和二进制文件打开方式的区别:

    (1)文本模式中回车被当成一个字符’\n’,在文件中如果读到0x1B,文本模式会认为这是文件结束符,会按照一定方式对数据做相应的转换。

    (2)二进制模式中’\n’会被认为是两个字符0x0D,0x0A;在读到0x1B时,二进制模式不会对文件进行处理。

    参考文章:https://blog.csdn.net/double_happiness/article/details/71123809


    二进制文件是包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件。一般是可执行程序、图形、图象、声音等等文件。

    文本文件(也称为ASCII文件):它的每一个字节存放的是可表示为一个字符的ASCII代码的文件。它是以 “行”为基本结构的一种信息组织和存储方式的文件,可用任何文字处理程序阅读的简单文本文件。

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

    用记事本打开二进制文件与上面的情况类似。记事本无论打开什么文件都按既定的字符编码工作(如ASCII码),所以当他打开二进制文件时,出现乱码也是很必然的一件事情了,解码和译码不对应嘛。例如文件流”00000000_00000000_00000000_00000001”可能在二进制文件中对应的是一个四字节的整数int 1,在记事本里解释就变成了”NULL_NULL_NULL_SOH”这四个控制符。

    参考文章:
    https://blog.csdn.net/qq_27736025/article/details/50725598
    https://www.cnblogs.com/pengwangguoyh/articles/3223072.html

    展开全文
  • 文本文件和二进制文件的差异和区别

    万次阅读 多人点赞 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. 文本文件与二进制文件区别
    展开全文
  • 二进制文件和非二进制文件

    千次阅读 2012-09-17 14:34:53
    二进制文件和非二进制文件   1. 流式文件:文件中的数据是一串字符,没有结构。 2. 文本文件是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。特别的是,文本文件是指以ASCII码方式(也称文本方式)存储...

    二进制文件和非二进制文件

     

    1. 流式文件:文件中的数据是一串字符,没有结构。

    2. 文本文件是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。特别的是,文本文件是指以ASCII码方式(也称文本方式)存储的文件,更确切地说,英文、数字等字符存储的是ASCII码,而汉字存储的是机内码。文本文件中除了存储文件有效字符信息(包括能用ASCII码字符表示的回车、换行等信息)外,不能存储其他任何信息,因此文本文件不能存储声音、动画、图像、视频等信息。

    设某个文件的内容是下面一行文字: 中华人民共和国 CHINA 1949如果以文本方式存储,机器中存储的是下面的代码(以十六进制表示,机器内部仍以二进制方式存储) D6 D0 BB AA C8 CB C3 F1 B9 B2 BA CD B9 FA 20 43 48 49 4E 41 20 31 39 34 39 A1 A3 其中,D6D0BBAAC8CBC3F1B9B2BACDB9FA分别是中华人民共和国ABCD”七个汉字的机内码,20是空格的ASCII码,4348494E41分别是五个英文字母“CHINA”ASCII码,31393439别是数字字符“1949”ASCII编码,A1A3是标点的机内码。从上面可以看出,文本文件中信息是按单个字符编码存储的,如1949分别存储“1”“9” “4”“9”这四个字符的ASCII编码,如果将1949存储为079D(对应二进制为0000 0111 1001 1101,即十进制1949的等值数),则该文件一定不是文本文件。

    文本文件是包含用户可读信息的文件。这些文件以ASCII码方式存储,可显示和打印。文本文件的行不能包括空字符(即码中的NULL),行的最大长度(包括换行符在内)也不能超过(LINE_MAX)所定义的字节数。不过文本文件中并不限制使用除空字符以外的控制字符或其它不可打印字符。(二进制文件[此处指非文本文件]包含计算机可读信息的文件。二进制文件可以是可执行的文件,使系统根据其中的指令完成某项工作。命令和程序都是以可执行的而进制文件方式存储。二进制文件没有行的长度限制,也可包含空字符。)

    3. 如果将存储的信息采用字符串方式来保存,那么称此类文件为文本文件(可以按字符显示)。将文件看作是由一个一个字节(byte)组成的,那么文本文件中的每个字节的最高位都是0,也就是说文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字节中的所有位都用上了。

    如果将存储的信息严格按其在内存中的存储形式来保存,则称此类文件为二进制文件。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作流式文件。文本或字符文件代表慢速设备,而二进制文件代表可以大块数据操作的快速外设,二进制文件内容基本无意义,系统对它不加解释地传给调用者,解释由调用者负责.而对字符文件,系统把他理解为单字节的ASCII或多字节的UNICODE字符串,并且对其中的特殊字符(如回车等)加以特殊处理.所以同一个文件,可以使用不同类型的系统调用.

    回车(CR)和换行(LF)符都是用来表示“下一行”的。而标准没有规定要使用哪一个。于是产生了三种不同的用法:

    (1) Doswindows采用回车+换行(CR+LF)表示下一行

    (2) UNIX采用换行符(LF)表示下一行

    (3) MAC机采用回车符(CR)表示下一行。

    当在不同的系统间传递文件,就要涉及格式的转换。

    文本方式和二进制方式的最大区别在于文本方式对于'\n'换行符的理解不同

    (1)DOS平台下,该字符会被展开成<CR>< LF>两个控制字符(相当于"\r\n"),在ASCII字符集下是 0DH,0AH

    (2)UNIX平台下,仅仅是<LF>,不会展开。

    (3)在二进制方式下,不管是什么平台,'\n'都是精确的<LF>

    linux/unix 系统上,只有一种文件类型的系统,带b字母的模式和对应的不带b字母的模式是相同的。

    关于EOF   EOF可以作为文本文件的结束标志,但不能作为二进制文件的结束符.feof函数既可以判断二进制文件,又可以判断文本文件. EOFWindows下是ctrl+zlinux下是ctrl+D.

    第二个问题就是文件按照文本方式或者二进制方式打开,两者会有什么不同呢? 其实不管是二进制文件也好,还是文本文件也好,都是一连串的01,但是打开方式不同,对于这些01的处理也就不同。如果按照文本方式打开,在打开的时候会进行translate,将每个字节转换成ASCII码,而以按照二进制方式打开的话,则不会进行任何的translate

    最后就是文本文件和二进制文件在编辑的时候,使用的方式也是不同的。譬如,你在记事本中进行文本编辑的时候,你进行编辑的最小单位是字节(byte);而对二进制文件进行编辑的话,最小单位则是位(bit),当然我们都不会直接通过手工的方式对二进制文件进行编辑了。

    4. 输入码、区位码、国标码与机内码 (都是汉字的编码形式)

    键盘是当前微机的主要输入设备, 输入码就是使用英文键盘输入汉字时的编码。

    计算机只识别由01组成的代码,ASCII码是英文信息处理的标准编码,汉字信息处理也必须有一个统一的标准编码。我国国家标准局于19815月颁布了《信息交换用汉字编码字符集——基本集》,代号为GB2312-80,共对6763个汉字和682个图形字符进行了编码,其编码原则为:汉字用两个字节表示,每个字节用七位码(高位为0,国家标准将汉字和图形符号排列在一个9494列的二维代码表中,;每两个字节分别用两位十进制编码,前字节的编码称为区码,后字节的编码称为位码,此即区位码,如字在二维代码表中处于17区第3位,区位码即为“1703 ”

    国标码并不等于区位码,它是由区位码稍作转换得到,其转换方法为:先将十进制区码和位码转换为十六进制的区码和位码,这样就得了一个与国标码有一个相对位置差的代码,再将这个代码的第一个字节和第二个字节分别加上20H,就得到国标码。如:字的国标码为3123H,它是经过下面的转换得到的:1703D>1103H->+20H>3123H

    国标码是汉字信息交换的标准编码,但因其前后字节的最高位为0,与ASCII码发生冲突,如字,国标码为31H23H,而西文字符“1” “#”SCII也为31H23H,现假如内存中有两个字节为31H23H,这到底是一个汉字,还是两个西文字符“1”;“#”?于是就出现了二义性,显然,国标码是不可能在计算机内部直接采用的,于是,;汉字的机内码采用变形国标码,其变换方法为:将国标码的每个字节都加上128,即将两个字节的最高位由01,其余7位不变,如:由上面我们知道,字的国标码为3123H,前字节为00110001B,后字节为00100011B,高位110110001B10100011B即为B1A3H,因此,保字的机内码就是B1A3H;

    汉字信息处理过程众所周知,计算机并不能识别汉字,因此必须要把每个字符转换成计算机能唯一识别的由01组成的代码,这个代码称为机内码

    汉字机内码的每个字节都大于128,这就解决了与西文字符的ASCII码冲突的问题。

    5. 测试

    FILE *fp;

                    int i = 12;

                    int j = 12;

                   

                    fp = fopen("01.txt","wb");

                    fprintf(fp,"%d",i);

                    fputc('\n',fp);

                    fwrite(&j,sizeof(int),1,fp);

                   

                    fclose(fp);

    即使是用二进制打开,但如果你用fputc,fputsfprintf这些函数,其实还是和用文本文件打开一样。只有用到fwrite/fread函数,才会看到一个整型占4个字节。

    按二进制写文件指的是直接按照数据在内存中的表现形式写入文件。例如,如果int型数据在内存中用 4 个字节表示,则写这个int数据的时候直接把对应的内存中 4 个字节的内容写入文件。在此过程中数据不需要做任何转换,所以效率较高。

    据有字符型和非字符型(数)两种。按文本方式写文件指的是将数据转换为对应的字符型数据之后再写入文件。对于字符型数据,由于其本身就是ASCII码字符,一般不必转换,直接写入文件。但是,由于不同的系统对于换行符('\n')有不同的处理(转换)方式,在有的系统(如Windows)下也会对 '\ n'作适当的转换。

    对于非字符型数据,都要进行转换处理。例如:int m = 12; 以及 double f = 2.3;,分别按照 "%d""%lf"方式将 m f 写入文件的时候,写入的分别是 '1''2'两个字符以及 '2''.' '3'等三个字符的ASCII码值。显然,如果按照二进制方式写的话,在文件中一般 m要占 4个字节、f 要占 8 个字节

     

     

    转载地址  http://liufabin66688.blog.163.com/blog/static/1396854820081027103133373/


    展开全文
  • C++程序显示二进制文件 内容
  • C++程序显示二进制文件“内容”

    千次阅读 多人点赞 2013-06-23 06:11:07
    带领学生学二进制文件操作,要观察文件中的内容,用记事本不爽,二进制文件根本就不是记事的“业务范围” 用EditPlus的HexView可以看,如图: 在我当学生的时候,这个活计是用DOS下的外部命令Debug干的,如下图,...
  • 刚学Java的IO流部分时,书上说只能使用字节流去读取图片、视频等非文本二进制文件不能使用字符流,否则文件会损坏。所以我就一直记住这一点了,但是为什么不能使用,这一直是我的一个疑惑。今天,我又想到了这个...
  • 记事本无论打开什么文件都按既定的字符编码工作(如ASCII码),所以当他打开二进制文件时,出现乱码也是很必然的一件事情了,解码和译码对应嘛。例如文件流”00000000_00000000_00000000_0000000...
  • 文本文件和二进制文件学习

    千次阅读 2016-07-03 20:23:46
     二进制文件与我们通常使用的文本文件储存方式有根本的不同。这样的不同很难用言语表达,自己亲自看一看,理解起来会容易得多。因此,我推荐学习二进制文件读写的朋友安装一款十六进制编辑器。这样的编辑器有很多,...
  • 二进制文件与文本文件区别从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。一个文件可以以文本模式或二进制模式打开,这两种的区别是:在文本模式中回车被当成一个字符''\n'',而二进制模式认为它...
  • 一、文本文件与二进制文件的定义  大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。简单来说,文本文件是基于字符编码...
  • 计算机文件基本上分为两类:文本文件和二进制文件。 计算机的存储在物理上都是二进制的,文本文件与二进制文件的区别是逻辑上的。简单的说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等...
  • 二进制文件和 ASCII

    千次阅读 2019-03-20 09:59:44
    文本文件是可以看到的字符,二进制文件可视字符,如图片. 二进制文件: 包含在ASCII及扩展 ASCII字符中编写的数据或程序指令的文件。计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件),图形文件及...
  • 文本文件和二进制文件详解(转)

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

    万次阅读 多人点赞 2019-03-17 10:08:51
    文件有两种,文本文件和二进制文件。读写文本文件比较简单,也在这里简单说一下;读写二进制文件用到了struct库,涉及一些大端小端、字节填充等概念,稍微有点复杂。 文件打开关闭 在读写文件之前,需要打开文件,...
  • 通常二进制文件打开是一堆乱码,因为记事本程序试图用字符串的方式打开,看到就是乱码。例如你写个程序,int a=10;把a写入文件,用二进制文件保存,大小为4个字节(int的大小), 用文本文件保存,大小为2个字节,...
  • python中使用文件的介绍: 计算机系统分为:计算机硬件,操作系统,...操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序...
  • 二进制文件和文本文件的区别详解

    千次阅读 2019-06-30 10:55:09
    为什么记事本打开二进制文件会乱码? 文本文件也是二进制文件: 总结 最近学了一些Python上的文件操作,然后对二进制文件和文本文件产生了兴趣,看了好多好多博客才对这俩的区别有了初步的认识,不同的博客有...
  • 详解文本文件和二进制文件区别

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

    千次阅读 2013-05-07 14:36:53
    使用程序处理文件的时候,总有两个概念是我们无法避开的:二进制文件和文本文件。究竟什么是文本文件,什么是二进制文件,说起来虽然很简单,但能否真正理解其差别并灵活应用在程序之中,却是另外一回事。在这篇...
  • 文本文件与二进制文件的编码差别

    千次阅读 2014-07-21 17:56:38
    网上关于文本文件与二进制文件的文章很多,但遗憾的是,这些文章讲得都比较散。下面我将结合所查到的资料,从多个角度谈谈文本文件与二进制文件。一、文本文件与二进制文件的定义大家都知道计算机的存储在物理上是二...
  • 将文件看作是由一个一个字节(byte) 组成的,那么文本文件中的每个字节的最高位都是0,也就是说文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字节中的所有位都用上了。这就是两者的区别; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,979
精华内容 8,791
关键字:

二进制文件不能使用记事本程序打开