Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用C+;在二进制文件中搜索字符串+;_C++_Regex_Binaryfiles - Fatal编程技术网

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

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

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

那么你能告诉我:

  • 我的错在哪里
  • 在二进制文件中搜索字符串的最佳(计算)方法是什么
  • 更新:直接字符串比较有效,因此问题必须在正则表达式定义的某个地方

    代码

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