用c++在二进制文件中搜索字符串
Search for a string in a binary file with C++
我编写了一个简短的程序来搜索二进制文件中的字符串。该文件由文本和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 };
ASCII文件是存储ASCII码的二进制文件,ASCII码是存储在一个字节中的7位代码。而二进制文件没有这样的限制,8位中的任何一个都可以在二进制文件的任何字节中使用。
在ASCII文件中,每个字节的最高位不使用,这意味着最高位被视为0。而在二进制文件中,它可能是0或1。所以这是有区别的。您可以使用HxD等工具检查二进制文件的十六进制细节。
问题是一个格式错误的正则表达式,其余的代码工作
相关文章:
- 在对象数组中搜索字符串并返回相应值的函数
- 在 QTextEdit 中搜索字符串
- C++ 中用于搜索字符串模式的正则表达式
- 如何在文件中搜索字符串并打印包含该字符串的行
- 搜索字符串是否至少包含一次从 0 到 9 的所有数字的最有效方法
- 从文件中提取的数据中的C 搜索字符串失败
- 在数组中搜索字符串的所有术
- 在 main 中搜索字符串的结尾时出现分段错误,但不在函数C++中搜索
- 在字符串中搜索字符串序列
- c++搜索字符串列表中的特定字符串
- 从文件中读取一行,并在其中搜索字符串(c++)
- 在向量中搜索C++字符串s中的单词
- 在另一个进程的内存中搜索字符串的每个匹配项
- 当搜索字符串有空格时查找字符串
- 在结构向量中搜索字符串C++
- 搜索字符串中的第一个字符不同于"X"
- 搜索字符串(只查找完全匹配的字符串,不忽略大写或小写字符
- 如何在C++中搜索字符串数组
- 替换特定位置后出现的所有搜索字符串
- 搜索字符串以使用递归查找另一个字符串