典型的方法是读取前几百个字节并查找ASCII NUL。
如果文件包含NUL,则绝对是二进制文件。大多数二进制文件的确包含NUL字节,但是文本文件绝对不能包含NUL字节。
#include <string.h>
bool is_binary(const void *data, size_t len)
{
return memchr(data, '\0', len) != NULL;
}
Run Code Online (Sandbox Code Playgroud)
警告,这是一种启发。换句话说,有时候是错误的。
读取所有字符,看看是否都是 ASCII,即 0 到 127 之间的代码。
有些工具仅通过检查文件是否有代码为 0 的字节来确定文件是文本文件还是二进制文件。
显然,如果您应用这两种方法,某些文件将会得到不同的结果,因此,您必须定义您正在查找的内容。