Задать вопрос
@rusianvodka

Поиск числа в файле, открытым в бинарном режиме?

Здравствуйте уважаемые дамы и господа, возник вопрос по поводу поиска числа в бинарном файле.
Допустим имеется код:
#include <iostream>
#include <conio.h>
using namespace std;
void main(){
	int t = 247;
	t = t - 246;
	cout << t << endl;
	_getch();
}

Данный код скомпилирован и выполняется, из него получается .exe файл.
Данный .exe файл после, я открываю с помощью hiew32(hex - editor) и могу с лёгкостью найти число 247 для его изменения. После .exe файл будет выводить иной результат(в зависимости от изменения).
Возник вопрос как данный поиск данного числа осуществить в коде на с++.
Погуглив и почитав литературу, получилось вот такое вот решения:
ifstream file_op(m_FileIn, ios::binary);
	if (!file_op) return 0;
	 int buf[1024];
	 int a = 247;     // то  что мы ищем
	 int z = 0;		// счётчик поиска
	 do {
		 file_op.read((char *)buf, sizeof buf);
		 for (int i = 0; i < 256; i++)
		 {
			 if (buf[i] == a) 
				 z++;	// счётчик(после полного прохода по файлу должен быть равен 1.)
		 }
 	 
	 } while (!file_op.eof());
	 file_op.close();
	return false;

Но к сожалению данный код не выполняется как задумано.
Буду благодарен за исправления и наставления. И решения проблемы неработоспособности данного кода.
  • Вопрос задан
  • 4048 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
VirtualSnake
@VirtualSnake
ifstream file_op( "test.exe", ios::binary );
if( !file_op )
{
	cout << "Not found!" << endl;
	return 0;
}
file_op.seekg( 0, file_op.end );
int length = file_op.tellg();
file_op.seekg( 0, file_op.beg ); // считаем длину файла
int8_t *buf = new int8_t[ length ];
int a = 247; // то  что мы ищем
bool find = false;
int position = 0;
file_op.read( (char *)buf, length );
for( int i = 0; i < length; i++ )
{
	if( *reinterpret_cast<int32_t*>( buf + i ) == a )
	{
		cout << "Founded in " << i << " position" << endl;
	}
}
delete[] buf;
file_op.close();
Ответ написан
@rusianvodka Автор вопроса
ifstream file_op(m_FileIn, ios::binary);
	if (!file_op) return 0;
	int v = 0;
	int buf[256];
	 int a = 247; // то  что мы ищем
	 int z = 0;		// счётчик, нашёл ли то что мы ищем
	 do {
		file_op.read((char *)buf, sizeof buf);
		for (int i = 0; i < 256; i++)
		 {
			 if (buf[i] == a) 
				 z++;	
		 }
	 } while (!file_op.eof());
	 file_op.close();
	 return false;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы