可以从文件的幻数确定文件类型吗?
如果我理解,幻数可以有不同的大小,也许参考字典或类似图书馆的东西可以帮助我吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
Linux上的 file
命令正是如此。研究它的内部结构,看看它如何使用魔术数字(签名字节)识别文件。完整的源代码可在darwinsys.com/file获得。
以下2个列表是最全面的文件类型及其魔术数字:
- File Signature Table
- Linux Magic Numbers
答案 2 :(得分:0)
JmimeMagic是一个用于此类
的java库答案 3 :(得分:0)
使用libmagic(在Ubuntu系统上 apt-get install libmagic-dev )。
下面的示例使用默认的magic数据库查询在命令行上传递的文件。 (本质上是 file 命令的实现。有关更多详细信息/功能,请参见 man libmagic 。
#include <iostream>
#include <magic.h>
#include <cassert>
int main(int argc, char **argv) {
if (argc == 1) {
std::cerr << "Usage " << argv[0] << " [filename]" << std::endl;
return -1;
}
const char * fname = argv[1];
magic_t cookie = magic_open(0);
assert (cookie !=nullptr);
int rc = magic_load(cookie, nullptr);
assert(rc == 0);
auto f= magic_file(cookie, fname);
if (f ==nullptr) {
std::cerr << magic_error(cookie) << std::endl;
} else {
std::cout << fname << ' ' << f << std::endl;
}
}