如何检查二进制文件中是否存在字符串?

紫罗兰色

我有一个二进制文件(不是文本文件),大小约为20M,并且我有一个字符串,该字符串可能存在或可能不存在。通常(对于文本文件),我将使用getline()逐行读取文件,然后使用find它来检测它,例如:

bool found = false;
{
    std::string stringToLookFor("string to look for");
    std::ifstream ifs("myBinaryFile.bin");
    std::string line;
    while (!found && getline(ifs, line)) {
        found = (line.find(stringToLookFor, 0) != std::string::npos);
    }
    ifs.close();
}

但是,我不确定对于二进制文件而言这是否明智。我主要担心的是此类文件的“行”可能很大。可能整个20M文件不包含换行符,因此我可能最终以较大的字符串读取以进行搜索(这种方法也可能存在其他问题,因此是我的问题)。

这被认为是可行的方法,还是我可能会遇到问题?是否有比普通文本逐行搜索二进制文件更好的方法?

zdf

我会咬住诱饵并尝试答案。您正在寻找:

//...
std::ifstream is(file_name, std::ios::binary);
if (!is)
  return -1;
auto res = std::search(std::istream_iterator<char>(is), std::istream_iterator<char>(), pattern.begin(), pattern.end());
//...

速度很快,并且不会一次所有文件加载到内存中。我不知道基于什么算法。boyer_moore_searcher``boyer_moore_horspool_searcher由于需要随机迭代器,因此无法使用更快的速度

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Java中检查字符串是否为二进制

如何检查通过gui提取的字符串是否是matlab中的二进制字符串?

检查unicode值是否在Erlang二进制字符串中?

替换二进制文件中的字符串

如何将二进制文件的内容放在c中的字符串中?

如何从二进制文件中读取以nul结尾的字符串

如何从已编译的二进制文件(.so)中删除字符串

如何获取大(二进制)文件中字符串的偏移量?

关闭程序后如何从二进制文件中读取字符串

在Pandas数据框中创建是否存在字符串的二进制表示形式

检查字符串是否为二进制

检查字符串是否是数字的二进制表示法

将二进制字符串(ASCII)转换为二进制文件

将大二进制字符串写入二进制文件

将二进制文件读入字符串

如何拆分(以特定的二进制值包含二进制的字符串?

如何从二进制字符串创建PDF?

在字符串中翻转二进制

从字符串中获取二进制数据

从二进制字符串中获取模式

JavaScript中的二进制到字符串

Python中字符串的二进制移位

从字符串中写入二进制数据

如何从C#的BinaryWriter创建的二进制文件中读取php中的字符串

从二进制文件列表中打印包含特定 ascii 字符串的文件

如何使函数检测字符串是否是二进制安全的

如何测试二进制字符串是否有效的UTF8?

使用外部文件中的二进制数据(utf-8中的字符串)

如何从vb.net中的二进制文件读取vb6定长字符串