Я написал короткую программу для поиска строки в двоичном файле. Файл состоит из текста и содержимого Base64. Если я тестирую его с помощью текстового файла ASCII, он работает. Если я попробую его с двоичным файлом, он ничего не соответствует.Поиск строки в двоичном файле с C++
Так что вы можете сказать мне:
- Где моя вина?
- Каков наилучший (вычислительный) способ поиска строки в двоичном файле?
UPDATE: Прямое сравнение строк работает, поэтому проблема должна быть где-то в определении регулярного выражения.
Код
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 };
'getline' доходит до новой строки, а двоичные файлы не имеют« строк ». Вы проверили, не кажется ли, что 'line' выглядит так, как вы ожидаете? – crashmstr
Если строка cout, она печатает строку, как и ожидалось, я также проверил typeid, это строка. – Steffen
Вклеивание кода с номерами строк не круто. – cubuspl42