美文网首页
浅析二进制文件与普通文件的区别

浅析二进制文件与普通文件的区别

作者: 伯特_唐 | 来源:发表于2019-12-09 14:01 被阅读0次

前言

近日,在写一个遍历查找目录文件内容功能时,在使用时功能很正常,确发现了些异常。读取文件时会将一些二进制文件读取出来,搜索目标字符串。本文将详细解析如何正确使用程序区分两种文件(基于c).
文中所指的二进制文件是指可执行文件,或者图片等非文本类型文件,即Binary文件。

正文

首先,为了文件的简单,我们手工生成两个文件,一个普通文件,一个二进制可执行文件
生成普通文件

echo "hello world 🌊">text.txt

生成可执行文件a.out

#include <stdio.h>
int main() {
      printf("hello world");
      return 0;
}

使用grep 查找hello时,两个文件输出为

sendpix0.jpg

grep是碰到可执行文件时会输出Binary file

定义

文本文件是一种计算机文件,它是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。(来源百度百科)
本文定义为:文本文件是一种顺序存储了unicode编码,或者其他编码字符的文件。因为不仅可以存英文还可以存放一些表情及换行等其他字符。

区分方法1

将依次遍历文档,然后与所有的可能的编码中的字符进行查找比较,如果所有字符都符合在这些编码字符列表中,则当前文档即为一个文本文档。
不过这种方法的效率堪忧,有没有一种更简单的方法呢。当然有!

区分方法2

当我们使用十六进制的方式打开两个文件,就会发现不同了。同时对比了一张图片的十六进制


文本文件
可执行文件

图片


图片

在文本文件的十六进制编码同时将 unicode符号也在文本中展示出来了。也可以从文本文件的定义可以得出,非ascii不能作为检测二进制的方法。
但是通过对比三个文件的十六进制编码会发现,可执行文件与图片中包含 了很多00,即空字符,而文本文件中是不存在的。

所以初步结论是不含有空字符的文件即为二进制文件.

但是我们总不能从文件头到尾去判断吧,所以我们查看grep与diff源码会发现一段宏

#define binary_file_p(buf, size) (memchr (buf, 0, size) != 0)
sendpix4.jpg

所以我们取一段数据长度判断,如果是包含了空字符就是非文本类型文件,比如取1024个字节。因为二进制文件一般会有一个文件头,而文件头的数据长度大约128个字节。取1024字节是尽可能的避免头中数据写满。

当然以上方法只针对于utf-8, asccii ,如果是utf-16或者 utf-32 在数据中也同样会产生空字符

iconv -f utf-8 -t utf-16 text.txt > text-utf-16.txt

sendpix5.jpg

使用grep中同样会将其识别为binary file 所以不向下做研究了。

相关文章

  • 浅析二进制文件与普通文件的区别

    前言 近日,在写一个遍历查找目录文件内容功能时,在使用时功能很正常,确发现了些异常。读取文件时会将一些二进制文件读...

  • C语言基础。。。。(文件-宏定义)

    C语言基础 文件 设备文件:scoket,FIFO,sda 普通文件:二进制文件,文本文件二进制文件格式:数据按其...

  • 文本文件和二进制文件

    文本文件和二进制文件 两者并无本质区别,或者说文本文件就是特殊的二进制文件。最主要的区别就是打开文件的程序对内容的...

  • C 语言 文件

    1 文件目录文件普通文件: 纯文本文件 (简历.日志,word文档) 二进制文件(.exe文...

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

    大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。 我们对文件...

  • 二进制文件与文本文件的区别

    原文 文本文件和二进制文件的定义: 计算机在物理内存上面存放的都是二进制,所以文本文件和二进制文件的主要区别是在逻...

  • 文本文件与二进制文件的区别,以及windows下的换行符

    1. 文本文件于二进制文件的区别 对于文本文件,比如 .txt 文件、.c 文件、.dat 文件等,使用一般的文本...

  • day11

    2019-04-09 代表的文件类型 - 普通文件 1.二进制文件(命令)2.文本文件(text)3.数据文件(d...

  • 浏览器各模块的编译依赖关系总结

    .aar文件与.jar文件的区别 两者区别:*.jar:只包含了class文件与清单文件,不包含资源文件,如图片等...

  • day12-文件和异常捕获

    一、二进制文件 1.二进制文件的分类 常见的二进制文件: 视频文件、音频文件、图片、压缩包等都是属于二进制文件 二...

网友评论

      本文标题:浅析二进制文件与普通文件的区别

      本文链接:https://www.haomeiwen.com/subject/xcybgctx.html