精华内容
下载资源
问答
  • 二进制文件文本文件
    2021-08-15 15:33:46

    计算机文件分为两种:二进制文件和ASCII(也称纯文本文件)

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

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

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

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

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

    简单说:文本文件只是二进制文件中的一种特例,为了与文本文件相区别,人们又把除了文本文件以外的文件称为二进制文件,由于很难严格区分文本文件和二进制文件的概念,所以我们可以简单地认为,如果一个文件专门用于存储文本字符的数据,没有包含字符以外的其他数据,我们就称之为文本文件,除此之外的文件就是二进制文件。

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

    常见的二进制文件有可执行程序、图形、图像、声音等等。

    更多相关内容
  • (让我们假设int的大小等于4)使用文本文件二进制文件,在内存方面有什么效率更高? 我不确定如何解决这个问题,欢迎您的帮助由于数据在磁盘上,因此内存与此无关。将其从磁盘上删除是另一回事。在撰写本文时,您的...

    我是C语言的新手,我需要一些帮助。

    可以说我只需要在文件中存储6位数字。 (让我们假设int的大小等于4)

    使用文本文件或二进制文件,在内存方面有什么效率更高? 我不确定如何解决这个问题,欢迎您的帮助

    由于数据在磁盘上,因此内存与此无关。将其从磁盘上删除是另一回事。在撰写本文时,您的问题没有用例说明,因此,除了纯粹的猜测之外,您的问题似乎无法我可以理解为什么面对这个"问题"会很困难,因为实际上没有人公开。在两种情况下,存储形式的选择都有其优缺点。这些内容是否适用于您将需要更多信息。

    磁盘比RAM慢上百万倍。

    如果您的意思是"就文件大小而言",则4当然小于6,因此,如果使用二进制而不是文本,则文件将小33%。实际上要多一点,因为您需要数字之间的分隔符作为文本,而不是二进制数字之间的分隔符。

    @unwind我认为他的意思是int的大小是4个字节。因此6位数字仍然是4个字节,无论是二进制还是文本。

    @RedSerpent是的,这就是我的阅读方式,但是如果以文本形式存储,那么像" 123456"这样的六位数数字将不会是4个字节。我现在很困惑。

    在标题中,您提到了效率。如果将数字写为64位整数,则它们将比相同数量的1字节(8位)字符占用更多空间。但是,如果您需要写大的复杂数据,如果出现问题,那么如果是文本文件,则修复起来要容易得多。否则,您将不得不编写一个特殊的程序来检查二进制文件,占用额外的时间等。

    大多数人将文件分为两类:二进制文件和ASCII(文本)文件。您实际上已经同时使用了两者。您编写的任何程序(C / C ++ / Perl / HTML)几乎可以肯定是ASCII文件。

    好的。

    ASCII文件定义为由ASCII字符组成的文件。它通常是使用文本编辑器(如emacs,pico,vi,记事本等)创建的。那里有许多高级编辑器可用于编写代码,但它们可能并不总是将其保存为ASCII。 ASCII是国际标准。

    好的。

    计算机科学就是关于创建良好的抽象的。有时成功了,有时却没有成功。好的抽象是关于呈现用户可以使用的世界的视图。文本编辑器是最成功的抽象方法之一。

    好的。

    当您编写程序并输入注释时,很难想象此信息没有存储为字符。 ASCII /文本文件实际上存储为0和1。

    好的。

    文件存储在磁盘上,磁盘可以用某种方式表示1和0。我们仅称它们为1和0,因为这也是一种抽象。不管使用哪种方式将0和1存储在磁盘上,我们都不会在乎,只要我们能想到它们即可。

    好的。

    实际上,ASCII文件基本上是二进制文件,因为它们存储二进制数。即,ASCII文件存储0和1。

    好的。

    ASCII和二进制文件之间的区别?

    好的。

    ASCII文件是存储ASCII码的二进制文件。回想一下,ASCII码是存储在一个字节中的7位代码。更具体地说,有128个不同的ASCII码,这意味着只需要7位就可以表示一个ASCII字符。

    好的。

    但是,由于最小可用大小为1个字节,所以这7位是任何字节的低7位。最高有效位是0。这意味着,在任何ASCII文件中,您都在浪费1/8的位。特别是,未使用每个字节的最高有效位。

    好的。

    尽管ASCII文件是二进制文件,但有些人将它们视为不同类型的文件。我喜欢将ASCII文件视为特殊类型的二进制文件。它们是二进制文件,每个字节均以ASCII代码编写。

    好的。

    完整的常规二进制文件没有此类限制。 256位模式中的任何一种都可以在二进制文件的任何字节中使用。

    好的。

    我们一直在使用二进制文件。可执行文件,目标文件,图像文件,声音文件和许多文件格式都是二进制文件。使它们成为二进制的原因仅仅是二进制文件的每个字节可以是256位模式之一。它们不限于ASCII码。

    ASCII文件示例

    好的。

    假设您正在使用文本编辑器编辑文本文件。因为使用的是文本编辑器,所以几乎可以编辑ASCII文件。在此全新文件中,键入" cat"。也就是说,字母" c",然后是" a",然后是" t"。然后,您保存文件并退出。

    好的。

    怎么了?暂时,我们不必担心打开文件,修改文件和关闭文件意味着什么的机制。相反,我们关心的是ASCII编码。

    好的。

    如果您查找ASCII表,则会发现0x63、0x61、0x74的ASCII代码(0x仅表示值以十六进制表示,而不是十进制/以10为基数)。

    好的。

    Here's how it looks:

    ASCII   'c'        'a'          't'

    Hex     63          61          74

    Binary  0110 0011   0110 0001   0111 1000

    每次键入ASCII字符并保存时,都会写入一个与该字符对应的整个字节。这包括标点符号,空格等。

    好的。

    因此,当您键入" c"时,它将被保存为0110 0011到文件中。

    好的。

    现在,有时文本编辑器会输入您可能不需要的字符。例如,某些编辑器"坚持"每行以换行符结尾。

    好的。

    文件的最后一行可能是缺少换行符的唯一位置。一些编辑器允许最后一行以换行符之外的其他结尾。一些编辑器在每个文件的末尾添加换行符。

    好的。

    不幸的是,即使换行符也不是那么普遍。在UNIX文件中通常使用换行符,但是在Windows中,通常在每个行的末尾使用两个字符(回车符,换行符,我相信是\ r和\ n)。为什么只需要两个字符就两个字符?

    好的。

    这可以追溯到打印机。在过去,打印机返回到行首所花费的时间等于键入两个字符所花费的时间。因此,在文件中放置了两个字符,以使打印机有时间将打印机球移回行首。

    好的。

    这个事实并不那么重要。主要是琐事。我提出它的原因只是为了以防万一,您可能想知道为什么从Windows向UNIX传输文件有时会产生有趣的字符。

    编辑二进制文件

    既然您知道在ASCII文件中键入的每个字符都对应于文件中的一个字节,那么您可能会理解为什么很难编辑二进制文件。

    好的。

    如果要编辑二进制文件,则确实要编辑单个位。例如,假设您要编写二进制模式11000011。您将如何执行此操作?

    好的。

    您可能很天真,请在文件中输入以下内容:

    好的。

    11000011

    但是,您现在应该知道,这并不是在编辑文件的各个位。如果您输入" 1"和" 0",则实际上是在输入0x49和0x48。也就是说,您要在文件中输入0100 1001和0100 1000。您实际上(间接地)一次输入8位。

    好的。

    有些程序允许您键入49,并将其转换为单个字节0100 1001,而不是ASCII码" 4"和" 9"。您可以将这些程序称为十六进制编辑器。不幸的是,这些可能不是那么容易获得。编写一个程序来读取一个看起来像十六进制对的ASCII文件,然后将其转换为具有相应位模式的真正的二进制文件并不难。

    好的。

    也就是说,它需要一个看起来像这样的文件:

    好的。

    63 a0 de

    并将此ASCII文件转换为以0110 0011开始的二进制文件(二进制为63)。请注意,此文件是ASCII,这意味着真正存储的是ASCII码,分别为'6','3',''(空格),'a','0'等。程序可以读取此ASCII文件,然后生成适当的二进制代码并将其写入文件。

    好的。

    因此,ASCII文件可能包含8个字节(字符为6个字节,空格为2个字节),输出二进制文件将包含3个字节,每十六进制对一个字节。

    好的。

    写入二进制文件

    好的。

    人们为什么仍然使用二进制文件?原因之一是紧凑性。例如,假设您要写入数字100000。如果以ASCII键入,则将使用6个字符(即6个字节)。但是,如果将其表示为无符号二进制,则可以使用4个字节将其写出。

    好的。

    ASCII很方便,因为它易于阅读,但是会占用很多空间。您可以使用二进制文件来更紧凑地表示信息。

    好的。

    例如,您可以做的一件事是将对象保存到文件中。这是一种序列化。要将其转储到文件中,请使用write()方法。通常,您将指针指向对象,并将表示对象的字节数(使用sizeof运算符确定)传递给write()方法。然后,该方法将出现在内存中的字节转储到文件中。

    好的。

    然后,您可以使用相应的read()方法从文件中恢复信息并将其放入对象中,该方法通常采用指向对象的指针(并且该指针应指向已分配内存的对象,无论是静态还是动态已分配)和对象的字节数,然后将字节从文件复制到对象中。

    好的。

    当然,您必须小心。如果您使用两种不同的编译器,或将文件从一种机器转移到另一种机器,则此过程可能无法正常工作。特别地,对象可以被不同地布置。这可以像字节顺序一样简单,或者可能存在填充问题。

    好的。

    这种将对象保存到文件的方法既简单又好用,但是可能不那么容易移植。此外,它等效于浅表副本。如果您的对象包含指针,它将把地址写出到文件中。这些地址可能完全没有意义。在程序运行时,地址可能很有意义,但是如果退出并重新启动,则这些地址可能会更改。

    好的。

    这就是为什么有些人发明自己的对象存储格式的原因:增加可移植性。

    好的。

    但是,如果您知道不存储包含指针的对象,并且正在使用与编写该文件的计算机类型相同的计算机系统中读取文件,并且使用的是相同的编译器,那么它应该可以工作。

    好的。

    这是人们有时更喜欢写整数,字符等而不是整个对象的原因之一。它们往往更易于携带。

    好的。

    ASCII文件是由ASCII字符组成的二进制文件。 ASCII字符是存储在一个字节中的7位编码。因此,ASCII文件的每个字节的最高有效位都设置为0。将ASCII文件视为一种特殊的二进制文件。

    好的。

    通用二进制文件使用所有8位。二进制文件的每个字节可以具有完整的256位字符串模式(与仅具有128位字符串模式的ASCII文件相反)。

    好的。

    有时候Unicode文本文件变得更加流行。但是目前,ASCII文件是文本文件的标准格式。

    好的。

    好。

    很多话。 一些很有见地。 谢谢。

    二进制文件基本上是不是"面向行"的任何文件。 任何文件中除实际书写的字符和换行符外,还有其他符号。

    通常,当您以文本模式写入文件时,任何新行\都将转换为回车+换行符\

    \。

    使用与文本文件相对应的二进制文件无法实现任何内存效率,文件存储在磁盘上而不是内存中。 这完全取决于您要处理的文件以及格式化的方式。

    由于您使用的是纯整数(无论int大小如何),因此使用文本或二进制文件将对性能产生相同的影响(这意味着您选择使用的类型不会产生任何区别)。

    如果以后要在文本编辑器中修改或读取文件,则最好使用文本模式写入文件。

    展开全文
  • 2)二进制文件:这类文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们,只有通过相应的软件才能将其显示出来。二进制文件一般是可执行程序、图形、图像、声音等等。 C++标准库提供了基于输入/输出...

    1)文本文件:这类文件以文本的ASCII码形式存储在计算机中。它是以"行"为基本结构的一种信息组织和存储方式。 
    2)二进制文件:这类文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们,只有通过相应的软件才能将其显示出来。二进制文件一般是可执行程序、图形、图像、声音等等。

    C++标准库提供了基于输入/输出流机制的文件操作,叫做文件流(File Stream)。打开文件的时候,可以用参数制定按照二进制方式还是文本方式。

    然而,可能与你的想象不同的是,这里的二进制或者文本与文件的格式并没有任何关系,而是文件流操作时对数据的表达方式。

    文本方式和二进制方式的最大区别在于文本方式对于'\n'换行符的理解不同,在DOS平台下,该字符会被展开成<CR>< LF>两个控制字符(相当于"\r\n"),在ASCII字符集下是0DH,0AH,而在UNIX平台下,仅仅是<LF>,不会展开。而在二进制方式下,不管是什么平台,'\n'都是精确的<LF>。

    而类似于一个数学上的数字128,会在文件中以什么样的格式存储,是以数字形式存储(80H),还是对应的可读文本('1','2','8'),却和文件流的打开方式无关。

    在C++的文件流中,使用的术语叫做格式化输入输出操作和无格式化操作,前者也就是<<和>>运算符,将数字按照可读文本存储,后者是get/put成员函数,直接存储数字格式。

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

        大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。简单来说,文本文件是基于字符编码的文件,常见的编码有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操作系统中并不需要,当然,当在两个不同的操作系统上共享文件时,这种存储转换又可能出来(如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)时,文本读与二进制读的结果一样.

    五、实例

    C的文本读写和二进制读写     应该说C的文本读写与二进制的读写是一个编程层次上的问题,与具体的操作系统有关,所以"用文本方式读写的文件一定是文本文件,用二进制读写的文件一定是二进制文件"这类观点是错误的.下面的讲述非明确指出操作系统类型,都暗指windows.

        C的文本方读写与二进制读写的差别仅仅体现在回车换行符的处理上.文本方式写时,每遇到一个''\n''(0AH换行符),它将其换成''\r \n''(0D0AH,回车换行),然后再写入文件;当文本读取时,它每遇到一个''\r\n''将其反变化为''\n'',然后送到读缓冲区.二进制读写时,其不存在任何转换,直接将写缓冲区中数据写入文件.对于内容为 “Ab123\r\n" (41 62 31 32 33 0D 0A)的文件,

    pf1 = fopen("f:\\1.txt","r");// 或者pf1 = fopen("f:\\1.txt","rb");
    for(int i=0;i <6;i++)
    {
       fread(&a[i],1,1,pf1);
       printf("%0X ",a[i]);
    }
    fclose(pf1);//关闭文件

    的结果分别为: 41 62 31 32 33 0A          和     41 62 31 32 33 0D  5678的存储形式为:ASCII码:    00110101   00110110   00110111   00111000  (四个字节) 5678的存储形式为:二进制:      00010110   00101110  (两个字节) 二进制文件和文本文件的唯一差异就是前者含有一些非标准输出的ASCII码。0x01就是非标准输出的ASCII码,

    0x61就是标准输出的ASCII码。)

    一. 基本知识:
    --------------------------------------------------转----------------------------------------------------
    1. 二进制文件与文本文件的区别:
    将文件看作是由一个一个字节(byte) 组成的, 那么文本文件中的每个字节的最高位都是0,也就是说文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字节中的所有位都用上了。这就是两者的区别;接着,第二个问题就是文件按照文本方式或者二进制方式打开,两者会有什么不同呢?其实不管是二进制文件也好,还是文本文件也好,都是一连串的0和1,但是打开方式不同,对于这些0和1的处理也就不同。如果按照文本方式打开,在打开的时候会进行translate,将每个字节转换成ASCII码,而以按照二进制方式打开的话,则不会进行任何的translate;最后就是文本文件和二进制文件在编辑的时候,使用的方式也是不同的。譬如,你在记事本中进行文本编辑的时候,你进行编辑的最小单位是字节(byte);而对二进制文件进行编辑的话,最小单位则是位(bit),当然我们都不会直接通过手工的方式对二进制文件进行编辑了。

    从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种:
    ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:
    ASCII码: 00110101 00110110 00110111 00111000
    ↓  ↓      ↓   ↓
    十进制码: 5     6   7      8

    共占用4个字节。ASCII码文件可在屏幕上按字符显示,例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。由于是按字符显示,因此能读懂文件内容。

    二进制文件是按二进制的编码方式来存放文件的。例如,数5678的存储形式为:00010110 00101110 只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。

    2. 文本模式(textmode)和二进制模式(binarymode)有什么区别?

    流可以分为两种类型:文本流和二进制流。文本流是解释性的,最长可达255个字符,其中回车/换行将被转换为换行符“\n”,(如果以"文本"方式打开一个文件,那么在读字符的时候,系统会把所有的"\r\n"序列转成"\n",在写入时把"\n"转成"\r\n" )。二进制流是非解释性的,一次处理一个字符,并且不转换字符。

    注:

    \n一般会操作系统被翻译成"行的结束",即LF(Line-Feed)
    \r会被翻译成"回车",即CR(Cariage-Return)
    对于文本文件的新行,在UNIX上,一般用\n(LF)来表示,Mac上用\r(CR)来表示,
    Windows上是用\n\r(CR-LF)来表示。

    通常,文本流用来读写标准的文本文件,或者将字符输出到屏幕或打印机,或者接受键盘的输入;而二进制流用来读写二进制文件(例如图形或字处理文档),或者读取鼠标输入,或者读写调制解调器。如果用文本方式打开二进制文件,会把“0D 0A”自动变换成“\n”来存在内存中。写入的时候反向处理。而二进制方式打开的话,就不会有这个过程。但是,Unicode/UTF/UCS格式的文件,必须用二进制方式打开和读写。

    ---------------------------------------------------------------------------------------------------------

    上述基础其实大可以略过,简言之,对用户来说:在 matlab 中存储成为二进制还是文本文件取决于fopen的方式,如果用wt,则存储为文本文件,这样用记事本打开就可以正常显示了;如果用w则存储为二进制文件,这样用记事本打开会出现小黑方块,要正常显示的话,可以用写字板或UltraEdit等工具打开。

    二. Matlab的I/O文件操作使用技巧和总结:

    1. Matlab 支持的I/O文件(对应“取/存”操作)类型:(所有文件I/O程序不需要特殊的工具箱)
    Supported File Formats for Import and Export- MATLAB & Simulink

    (注:从上表可以看到,matlab不支持doc格式的文档存取(因为doc文档包含很多格式控制符),请改用txt或者dat格式)

    2. Matlab 的I/O文件指南:
    Supported File Formats for Import and Export- MATLAB & Simulink


    以下是部分对应的中文译文:
    --------------------------------------------------------------转----------------------------------------
    本技术支持指南主要处理:ASCII, binary, and MAT files.
    要得到MATLAB中可用来读写各种文件格式的完全函数列表,可以键入以下命令:
    help iofun

    MATLAB中有两种文件I/O程序:high level and low level.
    High level routines: 包括现成的函数,可以用来读写特殊格式的数据,并且只需要少量的编程。
    Low level routines: 可以更加灵活的完成相对特殊的任务,需要较多的额外编程。
     

    High level routines 包括现成的函数,可以用来读写特殊格式的数据,并且只需要少量的编程。

    举个例子,如果你有一个包含数值和字母的文本文件(text file)想导入MATLAB,你可以调用一些low level routines自己写一个函数,或者是简单的用TEXTREAD函数。

    使用high level routines的关键是:文件必须是相似的(homogeneous),换句话说,文件必须有一致的格式。下面的段落描述一些high level file I/O routines并给出一些例子帮助理解概念。

    LOAD/SAVE

    主要的high level file I/O routines 是LOAD 和 SAVE函数。LOAD
    可以读MAT-file data或者用空格间隔的格式相似的ASCII data. SAVE可以将MATLAB变量写入MAT-file格式或者空格间隔的ASCII data。大多数情况下,语法相当简单。下面的例子用到数值由空格间隔的ASCII file sample_file.txt :

    1 5 4 16 8

    5 43 2 6 8

    6 8 4 32 1

    90 7 8 7 6

    5 9 81 2 3

    Example:
    用 LOAD and SAVE 读写数据

    % Load the file to the matrix, M :
    M = load('sample_file.txt')
    % Add 5 to M :
    M = M +5
    % Save M to a .mat file called 'sample_file_plus5.mat':
    save sample_file_plus5 M
    
    % Save M to an ASCII .txt file called 'sample_file_plus5.txt' :
    save sample_file_plus5.txt M -ascii

    UIGETFILE/UIPUTFILE

    UIGETFILE/UIPUTFILE是基于图形用户界面(GUI)的。会弹出对话框,列出当前目录的文件和目录,提示你选择一个文件。UIGETFILE让你选择一个文件来写(类似Windows ‘另存为’选项?)。用UIGETFILE,可以选择已存在的文件改写,也可以输入新的文件名。两个函数的返回值是所选文件名和路径。

    Example:
    用 UIGETFILE 从当前目录选择一个 M-file

    % This command lists all the M-files in the current directory and
    % returns the name and path of the selected file
    [fname,pname] = uigetfile('*.m','Sample Dialog Box')

    注意: UIGETFILE 一次只能选择一个文件。

    UIIMPORT/IMPORTDATA

    UIIMPORT是一个功能强大,易于使用的基于GUI的high level routine,用于读complex data files。文件也必须是homogeneous。

    IMPORTDATA形成UIIMPORT的功能,不打开GUI。可以将IMPORTDATA用于函数或者脚本中,因为在函数或者脚本中基于GUI的文件导入机制并不理想。下面的例子用到包含几行文件头和文本、数值数据的文件'sample_file2.txt' :

    This is a file header.

    This is file is an example.

    col1 col2 col3 col4

    A 1 4 612.000

    B 1 4 613.000

    C 1 4 614.000

    D 1 4 615.000

    Example: Using IMPORTDATA to read in a file with headers, text, and numeric data


    CODE:

    % This reads in the file 'sample_file2.txt' and creates a
    % structure D that contains both data and text data.
    % Note the IMPORTDATA command specifies a white space
    % as the delimiter of the file, but IMPORTDATA can usually
    % detect this on its own

    D = importdata('sample_file2.txt','') % 原文有误?

    D = importdata('sample_file2.txt')

     

    可以通过访问结构D的数据和文本域,来看结构D中的真实值,例如输入:

    data = D.data

    text = D.textdata

    可以用UIIMPORT读同一个文件并得到同样的结构.

    注意: 对于 ASCII data, 你必须检验导入向导正确的识别了列分隔符。

    TEXTREAD/STRREAD

    TEXTREAD 是一个强大的动态high level routine,设计用来读ASCII格式的文本和/或数值数据文件。STRREAD除是从字符串而不是文件读以外,类似于TEXTREAD

    两个函数可以用许多参数来改变其具体的工作方式,他们返回读入指定输出的数据。他们有效的提供给你一个
    “两全其美”的方法,因为他们可以用一个命令读入混合的ASCII和数值数据(high level routines的做法),并且你可以改变他们以匹配你特定的应用(如同low level routines做到的)。例子:


    CODE:

    Example 1: Using TEXTREAD to read in an entire file into a cell array
    % This command reads in the file fft.m into the cell array, file
    file = textread('fft.m','%s','delimiter','\n','whitespace','');
    CODE:

    Example 2: Using STRREAD to read the words in a line
    % This command uses the cell array created in Example 1 to
    % read in each word of line 28 in 'file' to a cell array, words
    words = strread(file{28},'%s','delimiter','')


    CODE:

    Example 3: Using TEXTREAD to read in text and numeric data from a file with headers

    % This command skips the 2 header lines at the top of the file
    % and reads in each column to the 4 specified outputs
    [c1 c2 c3 c4] = textread('sample_file2.txt','%s %s %s %s','headerlines',2)

    CODE:

    Example 4: Using TEXTREAD to read in specific rows of text and numeric data from a file

    % This command reads in rows B and C of the file. The 'headerlines'
    % property is used to move down to the desired starting row and the
    % read operation is performed 2 times

    [c1 c2 c3 c4] = textread('sample_file2.txt',...
    '%s %s %s %s',2,'headerlines',4)



    CODE:

    Example 5: Using TEXTREAD to read in only the numeric data from a file containing text and numbers

    % This command reads in only the numeric data in the file. The
    % 'headerlines' property is used to move down to the first row
    % of interest and the first column of text is ignored with the
    % '*' operator

    [c2 c3 c4] = textread('sample_file2.txt','%*s %d %d %f','headerlines',3)

     

    DLMREAD/DLMWRITE/CSVREAD

    DLMREAD 和 DLMWRITE函数能够读写分隔的ASCII data,而不是用low level routines。他们比low level routines容易使用,Low level routines用几行代码实现的功能可以用DLMREAD/DLMWRITE简化成一行。

    CSVREAD用来读分隔符是逗号的文件,是DLMREAD的特殊情况。当读空格和Tab分隔的电子数据表文件时,DLMREAD特别有用。以'sample_file.txt'为例:


    CODE:

    Example 1: Using DLMREAD to read in a file with headers, text, and numeric data

    % This reads in the file 'sample_file2.txt' and creates a matrix, D,
    % with the numeric data this command specifies a white space as the
    % delimiter of the file

    D = dlmread('sample_file.txt','')






    CODE:

    Example 2: Using DLMREAD to extract the first 3 columns of the last 3 rows

    % This reads in the first 3 columns of the last 3 rows of
    % the data file 'sample_file.txt'into the matrix, D_partial.
    % 读文件 'sample_file.txt' 前3列后3行,到矩阵D_partial.

    D_partial = dlmread('sample_file.txt','',[2 0 4 2])






    CODE:

    Example 3: Using DLMWRITE to write a comma delimited file

    % This creates a file called 'partialD.txt' that consists of
    % the first 3 columns of the last 3 rows of data where each
    % element is separated by a comma

    dlmwrite('partialD.txt',D_partial,',')


     

    注意: 保证DLMREAD and DLMWRITE指定范围的指标从0开始,而不是从1开始。

    WK1READ/WK1WRITE

    WK1READ 用来读Lotus123 电子数据表文件的数据;WK1WRITE用来写矩阵到Lotus123 电子数据表文件。

    XLSREAD

    XLSREAD用来读Excel的数值和文本数据。


    ---------------------------------------------------------------------------------------------------------

    三. 具体例子分析:
    Matlab网站用两个例子非常详尽地介绍了各个命令的基本用法,实际中,面对手头上的数据,如何选用合适的命令呢?以下结合几个示例给出一些总结,大家举一反三就可以了:

    1. 纯数据(列数相同):
    源文件:



    CODE:
    0 3866.162 2198.938 141.140
    1 3741.139 2208.475 141.252
    2 3866.200 2198.936 141.156
    3 3678.048 2199.191 141.230
    4 3685.453 2213.726 141.261
    5 3728.769 2212.433 141.277
    6 3738.785 2214.381 141.256
    7 3728.759 2214.261 141.228
    8 3748.886 2214.299 141.243
    9 3748.935 2212.417 141.253
    10 3733.612 2226.653 141.236
    11 3733.583 2229.248 141.223
    12 3729.229 2229.118 141.186




    解答:对于这个txt文件,由于各行列数相同,故简单地使用load,importdata均可。


    2.字段名(中、英文字段均可)+数据:
    源文件:


    CODE:
    CH0 CH1 CH2 CH3
    0.000123 0.000325 0.000378 0.000598
    0.000986 0.000256 0.000245 0.000698


    解答:由于是记录的形式,因此各行列数必相同(缺少部分列时请自行在文件中补上 Inf 或 NaN),故直接使用 importdata 便可。

    3.注释(含有独立的数字串)+数据(列数相同):
    问题:这个文件有4列,但前6行是文字说明,4列数字是从第8行开始的.现在我想把这个文件的前2列和文字说明提出来组成一个新的dat文件

    源文件:


    CODE:
    Group 2 12.02.2006 Limei
    Samples of datas: 50000

    CH0 CH1 CH2 CH3
    0.000123 0.000325 0.000378 0.000598
    0.000986 0.000256 0.000245 0.000698


    目标文件:


    CODE:
    Group 2 12.02.2006 Limei
    Samples of datas: 50000

    CH0 CH1
    0.000123 0.000325
    0.000986 0.000256


    解答:由于注释中含有独立的数字串,且注释部分没有明显的格式,这时候用importdata, load等高级命令直接读取会失败,用 textread, dlmwrite 等格式化命令也不太合适,因此只能使用低级命令进行读取。(当然了,可以跳过注释部分直接用高级命令读取数据,即:[a b c d] = textread(filename,'%f %f %f %f','headerlines',4); )。一个简单的、非通用的包含注释的读取方法如下:
    -------------------------------------转 ---------------------------------------------------------------------------------------

    CODE:
    clc;clear;
    fid = fopen('exp.txt', 'r');
    fid_n=fopen('ex.dat','w');
    while ~feof(fid)
    tline=fgetl(fid);
    if ~isempty(tline)
    if double(tline(1))>=48 && double(tline(1))<=57 %数值开始
    a=strread(tline);
    a(3:4)=[];
    fprintf(fid_n,'%f %f\n',a);
    clear a;
    elseif double(tline(1))==67 %字母C开始
    [b1,b2,b3,b4]=strread(tline,'%s %s %s %s');
    b=[b1{1},' ',b2{1}];
    fprintf(fid_n,'%s\n',b);
    clear b b1 b2 b3 b4;
    else
    fprintf(fid_n,'%s\n',tline);
    end
    else
    fprintf(fid_n,'%s\n',tline);
    end
    end
    fclose(fid);
    fclose(fid_n);


    ---------------------------------------------------------------------------------

    4. 注释(不含独立的数字串)+数据(列数相同):
    源文件:

    CODE:
    你好 abc
    欢迎来到 我们
    振动论坛
    vib.hit.edu.cn
    1 11 111 1111
    2 22 222 2222
    3 33 333 3333
    4 44 444 4444
    5 55 555 5555


    解答:直接用 importdata 便可

    注:有时候注释中含有独立的数字串也可以 importdata 成功,不过得到的结果有可能不正确,建议这时候使用第3种情形的读取方式。

    5. 注释与数据混排:
    对此当然只能自己编程,举例:

    源文件

    CODE:
    1 11 111 1111
    你好
    2 22 222 2222
    欢迎来到
    3 33 333 3333
    振动论坛
    4 44 444 4444
    vib.hit.edu.cn
    5 55 555 5555


    解答:
    --------------------------------------------转--------------------------------------
    CODE:

    function [data]=distilldata(infile)
    %功能说明:
    %将保存数据的原始文件中的数值数据读入到一个data变量中
    %使用说明:
    % infile——原始数据文件名;
    % data=数据变量

    tmpfile='tmp2.mat';

    fidin=fopen(infile,'r'); % 打开原始数据文件(.list)

    fidtmp=fopen(tmpfile,'w'); % 创建保存数据文件(不含说明文字)

    while ~feof(fidin) % 判断是否为文件末尾
    tline=fgetl(fidin); % 从文件读入一行文本(不含回车键)
    if ~isempty(tline) % 判断是否空行
    [m,n]=size(tline);
    flag=1;
    for i=1:n %判断一行中有没有字符(+-.Ee和空格键除外)
    if ~(tline(i)==' '|tline(i)=='-'|tline(i)=='.'|tline(i)=='E'...
    |tline(i)=='e'|tline(i)=='+'...
    |(double(tline(i))>=48&&double(tline(i))<=57))
    flag=0;
    break;
    end
    end
    if flag==1 % 如果是数字行,把此行数据写入文件
    fprintf(fidtmp,'%s\n',tline);
    end
    end
    end
    fclose(fidin);
    fclose(fidtmp);
    data=textread(tmpfile);
    delete(tmpfile);

    ---------------------------------------------------------------------------------------------------------
    另外,如果要求不高,也可以使用 textread 函数跳过注释部分进行读取,不过前提是需要事先知道文件内容的结构(即哪行是数据、哪行是注释)

    6.各列数据的分离:
    源文件:


    CODE:
    0 + 47038.7 1.05 09:26:07 C
    2 + 46477.7 1.03 09:28:38 C
    4 + 44865.7 1.04 09:28:48 C
    6 + 41786.4 1.03 09:28:56 C
    8 + 39896.0 0.97 09:29:03 C
    10 + 37518.4 0.93 09:29:15 C
    12 + 35858.5 0.92 09:29:30 C
    14 + 46105.0 1.03 09:30:21 C
    16 + 46168.6 6.89 09:30:30 C
    18 + 48672.3 4.33 09:30:40 C
    20 + 49565.7 0.49 09:30:48 C
    22 + 49580.7 0.53 09:30:55 C
    24 + 49602.3 0.84 09:31:03 C
    26 + 49582.5 1.51 09:31:11 C
    28 + 49577.0 1.39 09:31:19 C
    30 + 49589.3 0.61 09:31:27 C
    32 + 49578.3 1.06 09:31:29 C
    34 + 49512.5 1.77 09:31:38 C

    解答:直接用 [a,b,c,d,e,f]=textread(yourfilename,'%d %c %f %f %s %c'); 便可


    四. 注意事项:

    1. 请在 matlab 中保持当前路径在该数据文件对应的目录下进行存取,否则,存取时请给出该数据文件的具体路径。

    2. 存取时,请给出该数据文件的全称(包括后缀名,读取mat文件时可省略)

    3. load data.txt和A=load(‘data.txt’)的区别请参阅精华贴:[原创]写给学习 matlab 的新手们

    4. 请根据读写需要来打开文件,即根据你的需要来指定 fopen 的 permission 属性为读或写。如果只用 a 进行写入,就不能用 fread 读取。此时应该写完关闭文件,然后用 r 打开读取,或者直接用 a+ 进行同时读写操作。否则,会产生莫名其妙的问题!以下代码是一个错误的例子:

    CODE:

    filename='e.dat';
    fid=fopen(filename,'a');
    if fid<0
    error('fopen error');
    end
    s=[1 2 3 4;5 6 7 8];
    fwrite(fid,s,'float32')
    [dd ll]=fread(fid,inf,'float32');%把t中的数据全部读出,即s矩阵。
    fclose(fid);
     

    此时得到的dd, ll 是错误且无意义的!


    五. 其他相关问题:

    1. 连续读取多个文件的数据,并存放在一个矩阵中:
    (1) 首先是如何读取文件名:
    方法一:
    filename=dir(‘*.jpg’);
    那么第i个文件的文件名就可以表示为
    filename(i).name
    文件数量为:length(filename)

    方法二:
    先在Windows的 MSDOS(命令行)中使用以下命令生成一个list.txt文件:

    dir path\folder /on /b /s > path\list.txt

    举例:dir d:\test /on /b /s > d:\list.txt

    然后在 matlab 中使用:

    filename = textread(sFileFullName,'%s');

    把所有文件名读取到list细胞矩阵中,最后对filename{i}便可得到各文件名。


    (2) 然后是读取文件名的数据并存储:
    假设每个文件对应的数据是m*n的,则:

    CODE:
    k = length(filename);
    Data = zeros(m,n,k);
    for ii = 1:k
    Data(:,:,ii) = yourreadstyle(filename{ii}); %yourreadstyle是对应的文件读取方式的函数
    end

    2. 连续读取多个文件的数据,并存放在多个矩阵(以文件名命名)中:
    假设每个文件对应的数据是m*n的,则以上述第二种文件名读取方法为例:

    CODE:
    k = length(filename);
    for ii = 1:k
    D = yourreadstyle(filename{ii});
    eval([‘Data_’, num2str(ii), ‘ = D;’]);
    end



    3. 文件名命名问题:
    文件名为 abc00001,abc00002,... abc00009,abc00010,... abc00099,abc00100,...abc00879. 准备把这些文件名给放到一个数组里面去。

    解答:

    CODE:
    a=cell(879,1);
    for k=1:879
    a{k} = sprintf('%.5d',k);
    end


    4. 上述各种文件格式、类型自动识别问题:可以利用正则表达式来处理,使之通用性较强。例如使用以下代码可以自动处理上面提到了例1到例5各种情形,不过由于存在自动判断,对某些例子(如例1)效率自然要低一点,而对于另外的例子(如例3、例5)效率估计要高一点(少用了一个循环)。

    CODE:
    function [data]=distilldata_eight(infile)
    %功能说明:
    %将保存数据的原始文件中的数值数据读入到一个data变量中(自动判断数据行)
    %使用说明:
    % infile——原始数据文件名;
    % data=数据变量
    tmpfile='tmp2.mat';
    fidin=fopen(infile,'r'); % 打开原始数据文件(.list)
    fidtmp=fopen(tmpfile,'w'); % 创建保存数据文件(不含说明文字)
    while ~feof(fidin) % 判断是否为文件末尾
    tline=fgetl(fidin); % 从文件读入一行文本(不含回车键)
    if ~isempty(tline) % 判断是否空行
    str = '[^0-9 | \. | \- | \s | e | E]'; %正则表达式为:该行中是否包含除 - . E e 数字 和 空白字符 外的其他字符
    start = regexp(tline,str, 'once');
    if isempty(start)
    fprintf(fidtmp,'%s\n',tline);
    end
    end
    end
    fclose(fidin);
    fclose(fidtmp);
    data=textread(tmpfile);
    delete(tmpfile)



    5. 大量数据的读取问题:
    可以考虑使用循环分批读取(特别是在各数据是独立的时候),或者使用稀疏矩阵来实现(对此可以参阅本版精华贴: [原创]提高matlab运行速度和节省空间的一点心得(之三))。另外,也可参考《深入浅出MATLAB 7_X混合编程》一书第一章

    6. 读取整个txt文件的内容(获得文件中的所有字符):

    CODE:

    f = fopen('yourfilename.txt','rt'); % t 属性根据需要可省略
    x = fread(f,'*char');
    fclose(f);


    7. 把维数不同的矩阵及其变量名保存到一个 txt 文件中,例如 a1 = 123; a2 = [1 2 3;4 5 6] ,希望得到的 txt 文件如下:


    QUOTE:

    a1
    123
    a2:
    1 2 3
    4 5 6






    如果写入的时候简单一点,则可以采用以下方式,不过读取的时候比较麻烦:

    CODE:

    a1=123;
    a2=[1 2 3;4 5 6];
    fid = fopen('myfile.txt', 'wt');
    for i=1:2
    fprintf(fid, '%s: \n %s\n', ['a',int2str(i)], mat2str(eval(['a',int2str(i)])));
    end
    fclose(fid);


    相反,如果写入的时候复杂一点,则读取的时候会简单一点:

    CODE:

    a1=123;
    a2=[1 2 3;4 5 6];
    fid = fopen('myfile.txt', 'wt');
    for i=1:2
    fprintf(fid, '%s: \n', ['a',int2str(i)]);
    b = eval(['a',int2str(i)]);
    fprintf(fid, [repmat('%d ', 1, size(b,2)), '\n'], b');
    end
    fclose(fid);

    展开全文
  • RT,我想全文索引硬盘中的文本文件(包括程序文件、脚本、txt等等),但如果是二进制文件就不进行索引了。所以我想问问如何区分文本文件二进制文件呢?file命令原帖由 cjaizss 于 2007-5-1 22:...

    请教个问题,Linux下如何区分二进制文件和文本文件?

    (2012-04-13 07:22:09)

    标签:

    文本文件

    二进制

    linux

    如何

    杂谈

    请教个问题,Linux下如何区分二进制文件和文本文件?RT,我想全文索引硬盘中的文本文件(包括程序文件、脚本、txt等等),但如果是二进制文件就不进行索引了。

    所以我想问问如何区分文本文件和二进制文件呢?file命令原帖由 cjaizss 于 2007-5-1 22:59 发表

    file命令

    是个什么原理呢?

    用程序读http://www.3wanmei.com的时候通过什么来判断啊?原帖由 cugb_cat 于 2007-5-1 23:06

    发表

    是个什么原理呢?

    用程序读的时候通过什么来判断啊?

    file命令一般调用库函数实现,核心算法比判断是“文本文件”还是“二进制文件”复杂。

    其实要解决你的问题,其思路并不难,想想“ASCII文本文件”的定义,不就搞定了?

    既然已经有现成的file命令,file+grep就可以搞定了http://www.51banyun.com,使用shell的话,就不用像C那么费事啦原帖由

    cjaizss 于 2007-5-1 23:12 发表

    file命令一般调用库函数实现,核心算法比判断是“文本文件”还是“二进制文件”复杂。

    其实要解决你的问题,其思路并不难,想想“ASCII文本文件”的定义,不就搞定了?

    既然已经有现成的file命令,file+grep就 ...

    不用shell的,需要用C实现,不只是判断二进制文件和文本文件,还要把视频、图片等过滤掉,当然,压缩包也暂时不考虑~

    ASCII文件的定义是不是指包含的都是可打印字符?如果是这样的话,如果二进制文件中包含可打印字符怎么办?原帖由 cugb_cat 于

    2007-5-1 23:20 发表

    不用shell的,需要用C实现,不只是判断二进制文件和文本文件,还要把视频、图片等过滤掉,当然,压缩包也暂时不考虑~

    ASCII文件的定义是不是指包含的都是可打印字符?如果是这样的话,如果二进制文件中包含可 ...

    文件都是二进制的,所谓的“二进制文件”应该是指本意不是用来当文本文件存储的文件。

    如果一个本意不是拿来当文本存储的文件正好每个字符都是可打印的,被识别成了文本文件,那也是没办法的事情。原帖由 cugb_cat 于

    2007-5-1 23:06 发表

    是个什么原理呢?

    用程序读的时候通过什么来判断啊?

    直接看 file 的源码。原帖由 MMMIX 于 2007-5-1 23:26

    分享:

    a4c26d1e5885305701be709a3d33442f.png喜欢

    0

    a4c26d1e5885305701be709a3d33442f.png赠金笔

    加载中,请稍候......

    评论加载中,请稍候...

    发评论

    登录名: 密码: 找回密码 注册记住登录状态

    昵   称:

    评论并转载此博文

    a4c26d1e5885305701be709a3d33442f.png

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

    展开全文
  • 二进制文件 定义: 二进制文件就是把内存中的数据按其在内存中存储的形式原样输出到磁盘中存放,即存放的是数据的原形式。 读取流程: 用记事本打开二进制文件的流程是怎样的呢?记事本无论打开什么文件都按既定...
  • 文件在我看来分为文本文件二进制文件 二进制文件文本文件 在存储时 都是以二进制(0101...)存储的 二进制文件文本文件 在解析时 的解析方法不同 1. 区分 是 二进制文件 还是文本文件 既然我们说了 二进制...
  • C++二进制文件读写

    2018-04-09 22:50:55
    C/C++实现简单的二进制文件读取和写入示例 1.包含如何读取和写入数字,以及用缓存按字节读取 2.采用标准输入和输出函数创建、打开、关闭文本文件二进制文件
  • 1. 简介C/C++中对文件的操作分以二进制文件方式读写和以文本文件方式读写两种。例如,/*以读方式打开文本文件*/FILE *fp = fopen("test.txt","r");/*以写方式打开二进制文件*/FILE *fp = fopen("test.txt","wb");...
  • 文本文件二进制文件区别Here you will learn about difference between text file and binary file. 在这里,您将了解文本文件二进制文件之间的区别。 Text Files 文字档案 Text files are special subset ...
  • 文本文件二进制文件的差异和区别

    万次阅读 多人点赞 2018-05-16 11:11:20
    广义上的二进制文件包括文本文件,这里讨论的是狭义上的二进制文件与文本文件的比较: 能存储的数据类型不同 文本文件只能存储char型字符变量。二进制文件可以存储char/int/short/long/float/……各种变量值。 每...
  • 前面的话Python内置的base64模块,在这里http://docs.python.org/library/base64.html?highlight=base64#base64,包括b64...但是在用base64.encode编码二进制文件的时候,发现编码不完整,只有部分文件被编码了,b...
  • ​ 文本可以让你理解 计算机中为什么要使用二进制?我们存储的文件到底是什么?什么是字符集?什么是字符编码?什么是二进制文件?什么是文本文件
  • C/C++读取文件操作包括二进制文本文件
  • 二进制文件文本文件

    万次阅读 多人点赞 2018-08-11 14:19:21
    在windows上,用记事本就可以打开文本文件了,但要打开二进制文件需要对应的二进制文件解码器,因此,文本文件是更为大家所熟知的文件形式,而二进制文件的优点在于它的输入输出都省去了转换的过程,而且更省空间。...
  • STL文件文本(asc)和二进制(bin)两种格式。本程序提供了从二进制文本格式的转换。 STL文件文本(asc)和二进制(bin)两种格式。本程序提供了从二进制文本格式的转换。
  • 浅显说明文本文件二进制文件的区别
  • 一个完整的程序一般都包括数据的存储和读取;我们在前面写的程序数据都没有进行实 际的存储,因此 python 解释器执行完数据就消失了。实际开发中,我们经常需要从外部存 储介质(硬盘、光盘、U ...二进制文件: 二进制
  • 文本文件二进制文件的区别

    千次阅读 2018-09-21 14:20:46
    文本文件文本文件是一种计算机文件,它是一...文本文件中除了存储文件有效字符信息(包括能用ASCII码字符表示的回车、换行等信息)外,不能存储其他任何信息。 文本文件是一种由若干行字符构成的计算机文件。文...
  • 要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名。一般可以从选项文件(即my.cnf or my.ini,取决于你的系统)中找到路径。如果未包含在选项文件中,当服务器启动时,可以在命令行中以选项的...
  • 文件有两种,文本文件二进制文件。读写文本文件比较简单,也在这里简单说一下;读写二进制文件用到了struct库,涉及一些大端小端、字节填充等概念,稍微有点复杂。文件打开关闭在读写文件之前,需要打开文件,...
  • 'PDF document, version 1.2' 答案 15 :(得分:0) 如果文件包含NULL character,大多数程序都认为文件是二进制文件(任何不是&#34;面向行的文件&#34;)。 以下是用Python实现的pp_fttext()(pp_sys.c)的perl...
  • 了解二进制文件文本文件的区别,理解文件存储,传输, 显示的过程,及本质。 2.学习/操作 1. 二进制文件 TBD 2.文本文件 TBD 3. 源码文件 TBD 后续补充 ...
  • 0那么断定这个文件是二进制的,这在纯英文的环境下可以工作,但是如果一个文本包含了中文字符,那么这个文1、文本文件的复制package test;import java.io.BufferedReader;import java.io.BufferedWriter;import java...
  • 文章目录一、文件类型、常用操作1.打开文件1.1open函数1.2参数:模式 mode2.写入数据3.读取数据Reference 一、文件类型 、常用操作 1.打开文件 1.1open函数 open(file, mode='r', buffering=-1, encoding=...
  • 文本文件二进制文件,能用记事本打开的就是文本文件,不能用记事本打开的就是二进制文件
  • 目录文件的读写一、文本文件——写文件...2.二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂他们 操作文件的三大类: 1.ofstream:写操作 2.ifstream:读操作 3.fstream :读写操作 一、
  • 将文件看作是由一个一个字节(byte) 组成的,那么文本文件中的每个字节的最高位都是0,也就是说文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字节中的所有位都用上了。这就是两者的区别; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 304,275
精华内容 121,710
关键字:

二进制文件包含文本文件