我写了一个简短的程序来搜索二进制文件中的字符串。该文件包含文本和Base64内容。如果我用ASCII文本文件测试它,它可以工作。如果我用二进制文件尝试它,它与任何东西都不匹配。
所以你能告诉我:
更新:直接字符串比较有效,所以问题必须在正则表达式定义中。
代码
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 };
答案 0 :(得分:0)
ASCII文件是存储ASCII代码的二进制文件,ASCII代码是存储在字节中的7位代码。虽然二进制文件没有这样的限制,但是任何8位都可以用在二进制文件的任何字节中。
在ASCII文件中,不使用每个字节的最高位,这意味着最高位被视为0.在二进制文件中,它可能是0或1.所以有区别。您可以使用HxD等工具检查二进制文件的十六进制详细信息。
答案 1 :(得分:0)
问题是格式错误的正则表达式,其余代码都有效。