用c++在二进制文件中搜索字符串

Search for a string in a binary file with C++

本文关键字:搜索 字符串 二进制文件 c++      更新时间:2023-10-16

我编写了一个简短的程序来搜索二进制文件中的字符串。该文件由文本和Base64内容组成。如果我用一个ASCII文本文件测试它,它可以工作。如果我尝试使用二进制文件,它将不匹配任何内容。

你能告诉我吗?

    我的错在哪里?
  1. 在二进制文件中搜索字符串的最佳(计算)方式是什么?

更新:一个直接的字符串比较工作,所以问题一定是在正则表达式定义的某个地方。

代码
19 #include<iostream>
20 #include<fstream>
21 #include<regex>
22 #include<string>
23 
24 using namespace std;
25 
26 int main(int argc, char* argv[]) {
27     if (argc != 2){
28         cout << "Error message";
29     }
30 
31     regex type_response ("(TEST: )(.*)");
32     regex target_value ("(VALUE: )(.*)");
33     regex target_version ("(NAME: )(.*)");
34 
35     ifstream infile(argv[1], ios::binary);
36 
37     if (infile.is_open()){
38         string line;
39         while (getline(infile, line)){
40             if (regex_match(line ,target_version)){
41                 cout << line;
42             }
43         };
44     infile.close();
45 
46     return 0;
47     }
48 
49     else {
50         cout << "Could not open file.n";
51         return 1;
52     };
53 };

ASCII文件是存储ASCII码的二进制文件,ASCII码是存储在一个字节中的7位代码。而二进制文件没有这样的限制,8位中的任何一个都可以在二进制文件的任何字节中使用。

在ASCII文件中,每个字节的最高位不使用,这意味着最高位被视为0。而在二进制文件中,它可能是0或1。所以这是有区别的。您可以使用HxD等工具检查二进制文件的十六进制细节。

问题是一个格式错误的正则表达式,其余的代码工作