如何在二进制文件中查找ANSI字符串?

时间:2011-06-22 23:41:16

标签: c++ string search lookup binaryfiles

我想使用C ++找到二进制文件中第一次出现ANSI字符串。

我知道字符串类有一个方便的查找功能,但我不知道如果文件很大,我怎么能用它,比如5-10 MB。

我是否需要先将整个文件复制到内存中的字符串中?如果是,我怎样才能确保复制时没有二进制字符被破坏?

或者是否有更有效的方法来执行此操作,而无需将其复制到字符串中?

3 个答案:

答案 0 :(得分:5)

  

我是否需要先将整个文件复制到内存中的字符串中?

没有

  

或者是否有更有效的方法来完成它,而不需要将其复制到字符串中?

当然;使用std::ifstream打开文件(请务必在binary mode而非文字模式下打开),创建一对multi_pass iterators(来自BoostSpirit)在流周围,然后使用std::search搜索字符串。

答案 1 :(得分:2)

首先,不要担心角色损坏。 (但不要忘记以二进制模式打开文件!)现在,假设您的搜索字符串长度为n个字符。然后,您可以一次搜索整个文件,只要您确保将每个块的最后n-1个字符保留在下一个块之前。这样,您就不会丢失跨越块边界的匹配。因此,您可以使用该方便的查找功能,而无需立即将整个文件读入内存。

答案 2 :(得分:0)

如果您可以将文件映射到内存中,则可以避免复制。