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

时间:2014-05-10 12:47:01

标签: c++ regex binaryfiles

我写了一个简短的程序来搜索二进制文件中的字符串。该文件包含文本和Base64内容。如果我用ASCII文本文件测试它,它可以工作。如果我用二进制文件尝试它,它与任何东西都不匹配。

所以你能告诉我:

  1. 我的错在哪里?
  2. 在二进制文件中搜索字符串的最佳(计算)方法是什么?
  3. 更新:直接字符串比较有效,所以问题必须在正则表达式定义中。

    代码

    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 };
    

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

问题是格式错误的正则表达式,其余代码都有效。

相关问题