精华内容
下载资源
问答
  • 二进制的文件是
    千次阅读
    2020-12-30 14:50:26

    1 视图形式

    不同的二进制文件需要不同的软件来打开,例如BMP文件,需要一个读图的软件来打开才能看到里面保存的图像,MP3文件需要一个播放器软件才能听到里面的音频。而文本文件只需要记事本就可以打开查看里面的内容。

    2 存储形式

    二进制文件里存储的东西是二进制数据,就是01串。而文本文件中存储的是字符串,比如汉字。这点是从逻辑层面上所说的,不完全正确,但是便于理解,下面我会进阶的细说这里。

    3 性能

     二进制文件的读写速度非常快,因为它就是将数据在内存中的存储形式(二进制)原模原样放到文件中,读出来的东西不需要经过处理就可以直接放到内存中去用,但是这些二进制串我们是看不懂也处理不了的,所以就需要专门的解码软件来处理,才能将信息显现到我们面前,所以说二进制文件的读写比较快,但是对于我们程序员来说,可读性差。

     而文本文件首先有一个编码方式,例如ASCII或者Unicode,当我们要存一些东西时,会先用一定的编码方式将这些东西转为对应的编码,再将这个编码写进文件里,读的时候要先解码,才能将对应的字符显示出来,所以读写比较慢,但是读出来的东西是字符串,我们能看懂,可读性比较好。

    4 拓展

    1 为什么记事本打开二进制文件会乱码?

            再详细说一下文本文件的存储过程:数据在内存中都是以二进制存储的,所以要先从内存中将数据的二进制取出来,用ASCII(或Unicode)编码方式将其编码,再将这个编码存进文件中。特别有趣的地方就是:如果这些数据是字符,那么他们在内存中本身就是按ASCII码编好的,所以存进文件文件时不需要再进行编码了,也是原模原样将内存中的东西放进了文件中(与二进制文件存储方式一样是不是?)。但如果不是字符型数据,例如int i=10,他在内存中存的是10的二进制:1010,这个二进制经过ASCII编码之后,再解码出来肯定就不是10了。

            这就解释了为什么用记事本打开二进制文件时会乱码的问题。首先记事本也是一种解码软件,但他是按ASCII或者Unicode来解码的,他会按自己的方式给二进制文件来解码并显示字符。所以用记事本打开二进制文件时,也不会全部乱码,仔细看那些用字符串形式存的数据肯定不会乱码。

    2 文本文件也是二进制文件

            刚才说了在逻辑层面上:文本文件存的是字符,二进制文件存的是二进制数据。其实在物理层面上讲,我们的硬盘只能存储二进制。所以广义上讲文本文件也是二进制文件,只不过文本文件里只能存字符型数据,而字符型数据经过ASCII或Unicode解码之后我们能看懂。

            换一个角度想,所有二进制文件在硬盘上都是01串,我们都看不懂,所以需要一个解码软件将这堆二进制转换成我们想要的信息形式。所以这时就回到了文本文件和二进制文件的最表象区别:解码软件不同!用记事本打开二进制文件会乱码,而二进制的解码软件基本都打不开文本文件。

    5 总结

            在实际存储中最好是将数据分成字符数据和非字符数据两类:

            如果存储的是字符数据,无论采用文本文件还是二进制文件都是没有任何区别的,这点上面解释过了。

            如果存储的是非字符数据,那么就要看我们使用的情况来决定:

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

            2、如果需要频繁的向终端显示数据或从终端读入数据,那么就将这些数据转为字符串型,采用文本文件进行存放,这样可以节省转换时间。

    更多相关内容
  • 1. 二进制文件是什么? 二进制文件就是直接基于二进制形成的文件,文件中内容就是...010101...之类(也可表示成16进制),如下图所示。 2. 二进制文件和纯文本文件的区别是什么? 二进制文件是直接以二进制的值...

    1. 二进制文件是什么?

    二进制文件就是直接基于二进制形成的文件,文件中内容就是...010101...之类(也可表示成16进制),如下图所示。

    2. 二进制文件和纯文本文件的区别是什么?

    二进制文件是直接以二进制的值进行存储;而纯文本文件则在二进制的基础上,进行了字符编码,因此,我们看到的诸如 .txt 以及程序文件都是字符形式。

    3. 为什么图像、音频是二进制文件?

    因为二进制文件直接使用二进制进行表示,要比文本文件更加节省存储空间

    展开全文
  • 本文较为详细的分析了C#读取二进制文件方法。分享给大家供大家参考。具体分析如下: 当想到所有文件都转换为 XML时,确实是一件好事。但是,这并非事实。仍旧还有大量的文件格式不是XML,甚至也不是ASCII。二进制...
  • 二进制文件不是以ASCII代码存放数据的,它将内存中数据存储形式不加转换地传送到磁盘文件,因此它又称为内存数据的映像文件。因为文件中的信息不是字符数据,而是字节中的二进制形式的信息,因此它又称为字节文件。 ...
  • main2.cpp 生成1个二进制文件。 main3.c 读取二进制文件。 用fgets可以读取指定长度的字符串。 可用于读取格式化固定位址的二进制结构数据。
  • 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为...二进制文件是按二进制
  • 主要介绍了java判断一个文件是否为二进制文件的方法,涉及java针对文件的读取及编码判断技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 总的感觉,python本身并没有对二进制进行支持,不过提供了一个模块来弥补,就是struct模块。 python没有二进制类型,但可以存储二进制类型的数据,就是用string字符串类型来存储二进制数据,这也没关系,因为string...
  • 到此这篇关于Linux bash:./xxx:无法执行二进制文件报错的文章就介绍到这了,更多相关Linux 无法执行二进制文件 内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!...
  • 二进制文件存储方式比较方便,文本小,保密效果好 定义一个数据结构并实现相关操作 使用QDataStream进行读写操做 数据结构 #include struct AccountInfo { // 数据 QString Account; QString LogPasswd; // 初始...
  • 说明:一款使用Python编写的文本编辑器 支持编辑文本文件、二进制文件、改变字体大小。支持ansi、gbk和utf-8编码。编辑二进制文件时 文件内容以转义序列形式显示。编辑python代码文件时 也支持代码高亮显示 类似IDLE...
  • 主要介绍了python读写二进制文件的方法,实例分析了Python读写二进制文件的相关技巧,需要的朋友可以参考下
  • C++二进制文件读写

    2018-04-09 22:50:55
    C/C++实现简单的二进制文件读取和写入示例 1.包含如何读取和写入数字,以及用缓存按字节读取 2.采用标准输入和输出函数创建、打开、关闭文本文件或二进制文件
  • 将任意指定的文件,以二进制的方式,指定区间进行切割。 可以将HTTP的请求图片、视频导出 可以去除文本文件BOM头 可以提取文件中间的乱码字节
  • 开发过程,遇见将文件二进制的方式读取到缓存中的场景,于是在这里记录一下,方便以后复用。 读文件 void readFile(string& filePath, std::vector& data ) { ifstream file(filePath.c_str(), ...
  • 本篇文章主要介绍了java实现解析二进制文件的方法(字符串、图片),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 主要介绍了Python读取二进制文件代码方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 杂项文件和二进制文件 用于图像,视频和其他杂项二进制文件的混合用途存储库。
  • 用来读取二进制文件和写入二进制文件的函数
  • 主要介绍了Node.js Windows Binary二进制文件安装,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
  • minio 二进制可执行文件
  • 深度学习,读取二进制文件,识别手写数字。
  • 指定文本、或二进制文件、指定发送目标端口和目标IP、将文件内容以UDP数据包的形式发送出。 开发中测试推送二进制报文非常简单
  • 主要介绍了jscript读写二进制文件的方法,涉及javascript中ActiveXObject对象的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 二进制文件大小端转换工具,单独工具;二进制文件大小端转换工具,单独工具;二进制文件大小端转换工具,单独工具
  • fabric 1.0.0二进制文件

    2018-12-13 16:36:19
    fabric镜像文件及官方指定所需的二进制文件
  • 二进制文件与文本文件详解

    千次阅读 2019-11-27 22:50:22
    二进制文件 定义: 二进制文件就是把内存中的数据按其在内存中存储的形式原样输出到磁盘中存放,即存放的是数据的原形式。 读取流程: 用记事本打开二进制文件的流程是怎样的呢?记事本无论打开什么文件都按既定...

    二进制文件

    • 定义: 二进制文件就是把内存中的数据按其在内存中存储的形式原样输出到磁盘中存放,即存放的是数据的原形式。二进制文件是包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件。一般是可执行程序、图形、声音等文件,有自己特殊的编解码格式。不同的应用程序对二进制文件中的每个值会有不同的解读,要打开二进制文件需要对应的二进制文件解码器。

    • 读取流程: 用记事本打开二进制文件的流程是怎样的呢?记事本无论打开什么文件都按既定的字符编码工作(如ASCII码),用ASCII码的规则去解读二进制文件时,会出现乱码。所以当他打开二进制文件时,出现乱码也是很必然的一件事情,解码和译码不对应。例如文件流”00000000_00000000_00000000_00000001”可能在二进制文件中对应的是一个四字节的整数int 1,在记事本里解释就变成了”NULL_NULL_NULL_SOH”这四个控制符。文本文件将浮点数80.000000用了38(表示8) 30(表示0) 2E(表示.) 30(表示0) 30(表示0) 30(表示0) 30(表示0) 30(表示0) 30(表示0),二进制文件用了4个字节表示浮点数00 00 A0 42。字符型的内容都是ASCii码的形式,没有区别。

    • 例子: 在计算机中,所有的颜色都可以映射为一个二进制的值。图片存储时,图片上每个点都有自己的颜色值,将每个点的颜色值,以及图片本身的宽高信息储存起来,就是最基本的位图存储(bmp),位图存储是没有压缩的。将位图信息,经过二次编码,压缩就形成了压缩后的图片。算法不同产生的图片格式也有区别。常见的包括jpg,png,gif等。文本文件基本上是定长编码的(也有非定长的编码如UTF-8)。而二进制文件可看成是变长编码的,因为是值编码,多少个比特代表一个值,完全由自定义的编解码规则决定。像BMP文件,其头部是较为固定长度的文件头信息,前2字节用来记录文件为BMP格式,接下来的8个字节用来记录文件长度,再接下来的4字节用来记录bmp文件头的长度。

    • linux 二进制的兼容性: Linux上二进制有一个显著的特点就是可移植性不强。我们在不同的发行版之间,不同的内核版本之间,程序往往是不能通用的,比如把ubunbtu下面编译的二进制可执行文件拷贝到CentOS上,基本不可能运行。原因是程序总需要使用或多或少的系统调用,系统调用是核心代码实现的,核心不同自然也就不兼容了。另外不同系统的对执行文件加载方式也不同。
      如果应用对内核kernel版本有要求,则不建议使用docker,docker底层复用的host的kernel.,如果可以用docker,可以解决除kernel版本外的兼容性问题,build once run everywhere。

    文本文件

    • 定义: 文本文件是把数据的终端形式的二进制数据输出到磁盘上存放,即存放的是数据的终端形式. 文本文件(也称为ASCII文件):它的每一个字节存放的是可表示为一个字符的ASCII代码的文件。它是以 “行”为基本结构的一种信息组织和存储方式的文件,可用任何文字处理程序阅读的简单文本文件。

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

    • 选择: 如果是需要频繁的保存和访问数据,那么应该采取二进制文件进行存放,这样可以节省存储空间和转换时间。
      如果需要频繁的向终端显示数据或从终端读入数据,那么应该采用文本文件进行存放,这样可以节省转换时间。

    • 区别: window 文本模式中,在存储\n时要转化为\r\n,读取文件时进行逆转换。window二进制模式时,则不进行转换。

    • ^m原因: 回车和换行是不相同的,Windows中文字另起一行内存表示为<回车><换行>对应\r\n,而Linux、Unix中则是单单一个<换行>对应\n。Mac中则是一个<回车>对应\r。C语言起源于Unix的产生,对于文件中的另起一行,Unix采用单个\n表示,我们通常在输出换行时加一个\n就可以了,Windows也是如此。到了数据从内存到硬盘上进行存储时,对于unix来说,\n照样是\n,在Linux下,二进制文件和文本文件都是以’\n’作为行结束符,所以不需要转换,而Windows为了防止读取时混乱必须转换为\r\n。Windows 格式的文本文件,用\r\n 作为换行符,而Unix 的则是以\n作为换行符,所以dos 底下的文本文件到了unix的话,换行符就会多出来一个 0D(CR) 显示为 ^M。

    在这里插入图片描述

    结构体写入文件

    • 结构体写入文件:C语言把文件看作一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。根据数据的组织形式,可分为ASCII文件和二进制文件。ASCII文件又称为文本(text)文件,它的每个字节放一个ASCII代码,代表一个字符。二进制文件是把内存中的数据按其在内在中的存储形式原样输出到磁盘上存放。二进制将数据在内存中的样子原封不动的搬到文件中,文本格式则是将每一个数据转换成字符写入到文件中,他们在大小上,布局上都有着区别。由此可以看出,二进制文件可以读出来直接用,但是文本文件还多一个“翻译”的过程,因此二进制文件的可移植性好。
    • C语言把一个结构体数组写入文件分三步:
      1、以二进制写方式(wb)打开文件
      2、调用写入函数fwrite()将结构体数据写入文件
      3、关闭文件指针
      相应的,读文件也要与之匹配:
      1、以二进制读方式(rb)打开文件
      2、调用读文件函数fread()读取文件中的数据到结构体变量
      3、关闭文件指针
    • fwrite :函数按照指定的数据类型将矩阵中的元素写入到文件中。写二进制文件其调用格式为:COUNT=fwrite (fd, A, precision)其中COUNT返回所写的数据元素个数,fd为文件句柄,A用来存放写入文件的数据,precision用于控制所写数据的类型,其形式与fread函数相同。当我们按照二进制方式往文件中写入数据,则将数据在内存中的存储形式原样输出到文件中。用fwrite 写入文件的如果是字符,那么就会显示为字符,写入的是数字显示不出来,写的是二进制内容(所谓的乱码)
    • fprintf :写文本文件 函数的调用格式为:COUNT= fprintf(fd, format, A)其中A存放要写入文件的数据。先按format指定的格式将数据矩阵A格式化,然后写入到fid所指定的文件。format用以控制读取的数据格式,由%加上格式符组成,常见的格式符有d,f,c,s。fid为文件句柄。fprintf写的是数字转换成ASCII码之后的字符。
    • 当使用fwrite将一个int型数字65写入文本文件时,由于65对应的二进制数是1000001,十六进制数是0x41,存储的是以二进制的形式1000001.在notepad++中使用十六进制方式打开显示的是:0x0041,转换为十进制则为65。记事本打开可能存在乱码,因为fwrite在写入的时候是采用整字节的二进制写入,而文本编辑器采用的是ascll码显示,两者不兼容。
    • 当使用fpintf将一个int型数字65写入文本文件时,将65每一位转换为ASCII码存储,6、5分别对应ASCII码54、53,存储的是ASCII码54、53.在notepad++中使用十六进制方式打开显示的是:3635,转换为十进制则为54、53,这正是数字6、5的ASCII码。使用记事本打开这个文本文件时,记事本将存储在其中的54、53当做ASCII码翻译为字符6、5显示,我们看到的是便是字符65。
    • 二进制读写是将内存里面的数据直接读写入文本中,而文本呢,则是将数据先转换成了字符串,再写入到文本中。下面我用个例子来说明。
      我们定义了一个结构体,表示一个学生信息,我们打算把学生的信息分别用二进制和文本的方式写入到文件中。
    struct Student 
    {
        int num;
        char name[20];
        float score;
    };
    我们定义两个方法,分别表示内存写入和文本写入
    //使用二进制写入
    void write_to_binary_file()
    {
        struct Student stdu;
        stdu.num = 111;
        sprintf_s(stdu.name,20,"%s","shine");
        stdu.score = 80.0f;
        fstream binary_file("test1.dat",ios::out|ios::binary|ios::app); //此处省略文件是否打开失败的判断
        binary_file.write((char *)&stdu,sizeof(struct Student));//二进制写入的方式
        binary_file.close();
    } 
    //文本格式写入
    void write_to_text_file()
    {
        struct Student stdu;
        stdu.num = 111;
        sprintf_s(stdu.name,20,"%s","shine");
        stdu.score = 80.0f;
        FILE *fp = fopen("test2.dat","a+");   //此处省略文件是否打开失败的判断
        fprintf(fp,"%d%s%f",stdu.num,stdu.name,stdu.score); //将数据转换成字符串(字符串的格式可以自己定义)
        fclose(fp);
    } 
    //MAIN函数调用前面两个方法
    int _tmain(int argc, _TCHAR* argv[])
    {
        write_to_binary_file();
        write_to_text_file();
        
        return 0;
    }
    

    二进制 图
    二进制文件
    文本文件 图
    文本文件

    • stdu.num = 111: 二进制文件里面将111编码成6F,1个字节,这刚好是111的16进制表示,而文本文件中则写成31 31 31用了3个字节,表示111。
    • stdu.name = “shine”: 二进制和文本文件中73 68 69 6E 65都表示shine,这体现对字符数据处理的一致性。
    • stdu.score = 80.0f: 二进制文件里是几个连续的FE,而文本文件中是38 30…。文本文件将浮点数80.000000用了38(表示8) 30(表示0) 2E(表示.) 30(表示0) 30(表示0) 30(表示0) 30(表示0) 30(表示0) 30(表示0),二进制文件用了4个字节表示浮点数00 00 A0 42
    • 通过这里我们可以初见端倪了,二进制将数据在内存中的样子原封不动的搬到文件中,文本格式则是将每一个数据转换成字符写入到文件中,他们在大小上,布局上都有着区别。由此可以看出,二进制文件可以从读出来直接用,但是文本文件还多一个“翻译”的过程,因此二进制文件的可移植性好。
    展开全文
  • jffs2.img二进制文件

    2021-04-01 10:33:17
    荔枝派Zero(V3s)制作SPI Flash 系统镜像时使用的最小根文件系统二进制文件
  • 具有三种搜索功能。 - 使用十六进制搜索字节 - 搜索纯文本字符串 - 搜索较小的二进制文件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,235,115
精华内容 494,046
关键字:

二进制的文件是