C++ 使用C+;在二进制文件中搜索字符串+;
我写了一个简短的程序来搜索二进制文件中的字符串。该文件由文本和Base64内容组成。如果我用ASCII文本文件测试它,它会工作。如果我用一个二进制文件尝试它,它与任何东西都不匹配 那么你能告诉我:C++ 使用C+;在二进制文件中搜索字符串+;,c++,regex,binaryfiles,C++,Regex,Binaryfiles,我写了一个简短的程序来搜索二进制文件中的字符串。该文件由文本和Base64内容组成。如果我用ASCII文本文件测试它,它会工作。如果我用一个二进制文件尝试它,它与任何东西都不匹配 那么你能告诉我: 我的错在哪里 在二进制文件中搜索字符串的最佳(计算)方法是什么 更新:直接字符串比较有效,因此问题必须在正则表达式定义的某个地方 代码 19#包括 20#包括 21#包括 22#包括 23 24使用名称空间标准; 25 26 int main(int argc,char*argv[]){ 27如果(a
19#包括
20#包括
21#包括
22#包括
23
24使用名称空间标准;
25
26 int main(int argc,char*argv[]){
27如果(argc!=2){
28 coutASCII文件是存储ASCII代码的二进制文件,ASCII代码是存储在字节中的7位代码。而二进制文件没有此类限制,8位中的任何一位都可以用于二进制文件的任何字节
在ASCII文件中,不使用每个字节的最高位,这意味着最高位被视为0。而在二进制文件中,它可能是0或1。因此存在差异。您可以使用以下工具检查二进制文件的十六进制详细信息。问题在于正则表达式格式错误,其余代码可以工作。getline
直到换行,二进制文件没有“行”。您是否检查了行
是否看起来像您期望的那样?如果我没有行,它会按预期打印字符串,我还检查了typeid,它是一个字符串。用行号粘贴代码并不酷。我不知道它是否酷,但我认为它是有用的。当我将行存储在字符串变量和regex中时,它应该可以工作。但它不能。如何关于对二进制文件中的每个字节执行此类操作:byte=0x7f&byte;
然后执行regex
操作。
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 };