Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
rusianvodka
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
#1

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

21.05.2014, 01:56. Просмотров 1114. Ответов 15
Метки нет (Все метки)

Здравствуйте уважаемые дамы и господа, возник вопрос по поводу поиска числа в бинарном файле.
Допустим имеется код:
C++ (Qt)
1
2
3
4
5
6
7
8
9
#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 файл будет выводить иной результат(в зависимости от изменения).
Возник вопрос как данный поиск данного числа осуществить в коде на с++.
Погуглив и почитав литературу, получилось вот такое вот решения:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
Но к сожалению данный код не выполняется как задумано.
Буду благодарен за исправления и наставления. И решения проблемы неработоспособности данного кода.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2014, 01:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поиск числа в файле, открытым в бинарном режиме (C++):

Поиск в бинарном файле - C++
в бинарном файле записаны цены вводится цена программа должна выдать все услуги равные цене не пойму почему он выдаёт cout &lt;&lt; &quot;Error!...

Поиск в бинарном файле - C++
мне надо в бинарном файле найти одну 8-ми байтную строку, я сделал вот такой поиск, но он почему то не работает :( std::fstream stream; ...

Поиск по структуре в бинарном файле - C++
Всем привет! Хотел бы обратиться к более опытным людям.Есть задача &quot;Запись имеет вид: название инструмента, число, месяц и год...

Бинарный поиск в бинарном файле - C++
Здравствуйте, помогите решить проблему. Написал программу для нахождения числа бинарным поиском и перебором в бинарном файле. Программа,...

Поиск заданной последовательности символов в бинарном файле - C++
Допустим в файле написано &quot;raz dva tri dva raz raz dva&quot;. Нужно произвести поиск и подсчёт введёной пользователем последовательности...

Поиск в бинарном файле с использованием файловых потоков - C++
Подскажите как реализовать поиск объекта в бинарном файле.(телефонный справочник, поиск по названию абонента)

15
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.05.2014, 02:17 #2
Ошибка в том, что в файле не одни int записаны, а вы, судя по коду, считаете, что одни.

Добавлено через 1 минуту
Нужно искать сочетание байт (которое видите в hex-редакторе, как число 247).

Добавлено через 4 минуты
Но и это не гарантирует, что найдёте то, что нужно.
0
rusianvodka
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
21.05.2014, 02:18  [ТС] #3
Хм, возможно вы полностью правы, мне просто казалось что всё идёт по 4 байта, то есть если перебирая по шагам по 4-ре байта весь файл в итоге я найду нужное число.
Видимо я не правильно понял..
Как же тогда правильнее решить поставленную задачу, или если вам не сложно посоветуйте где можно углубить свои знания в этой теме.
Ну и если можете привести пример кода, будет вообще божественно.
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.05.2014, 03:15 #4
Цитата Сообщение от rusianvodka Посмотреть сообщение
Данный .exe файл после, я открываю с помощью hiew32(hex - editor) и могу с лёгкостью найти число 247 для его изменения.
Поделитесь секретом: как вы в .exe, с помощью hex-редактора, находите int, равный 247?
0
rusianvodka
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
21.05.2014, 14:52  [ТС] #5
Очень просто, с помощью калькулятора я перевожу число в hex. Получается что 247 это f7 добавляю после пару нулей и нахожу данное число.
После меняю данное число в exe файле для проверки и запускаю exe. Теперь exe работает как было поменяно(задуманно).

Добавлено через 22 минуты
плюс исходя из этой картинки, я посчитал что всё выравнивается на 4 байта.
или я не прав?
0
Миниатюры
Поиск числа в файле, открытым в бинарном режиме  
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.05.2014, 14:55 #6
А если release собрать, пробовали искать?
0
rusianvodka
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
21.05.2014, 14:59  [ТС] #7
нет не пробовал, да и пока не задумывался об этом, сейчас происходит решение проблем и задач которые я задал выше)
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.05.2014, 15:12 #8
А что тут задумываться? Соберите в release и попробуйте найти своё число, а потом уже можно и задуматься.
0
rusianvodka
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
21.05.2014, 15:47  [ТС] #9
Собрал как вы и сказали в release, также с лёгкостью нашлось число, и изменилось.
После запуска exe файла вывелось задуманное число с последствиями изменения числа в exe
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.05.2014, 15:59 #10
Компилируете в чём?
0
rusianvodka
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
21.05.2014, 16:11  [ТС] #11
VS 2013
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.05.2014, 16:53 #12
В этом exe находите?
0
Вложения
Тип файла: rar MY1.rar (5.2 Кб, 2 просмотров)
rusianvodka
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
21.05.2014, 17:46  [ТС] #13
проблема решена, всё было связанно на том что у меня 64 битные инты .
Переделав с помощью одного человека некоторые строки и дописав int32_t.
всё заработало.
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.05.2014, 20:32 #14
Цитата Сообщение от rusianvodka Посмотреть сообщение
что у меня 64 битные инты .
64-битные инты где?
А на вопрос ответить?
Цитата Сообщение от alsav22 Посмотреть сообщение
В этом exe находите?
0
rusianvodka
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
21.05.2014, 21:08  [ТС] #15
я не понимаю как связан поиск в вашем ехе файле с моим вопросом в шапке.
по поводу 64, то у меня 64 разрядная система и тут инты 8 байтные.
0
21.05.2014, 21:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2014, 21:08
Привет! Вот еще темы с ответами:

Запись в бинарный файл в бинарном режиме: будут ли числа записаны в двоичной системе счисления? - C++
Если я записываю случайное четырехзначное число в бинарный файл, открываю его в бинарном режиме, то будут ли те числа записаны в двоичной...

В бинарном файле содержатся числа. Сформировать квадратную матрицу... - C++
Всем доброго времени суток)Есть задача,решения которого я не могу найти(т.к саму задачу непонимаю).Если есть желание ,посмотрите...

В заданном бинарном файле, содержащем целые числа, найти произведение положительных чисел - C++
Помогите,пожалуйста,с заданием,учусь на психолога,а нам вот поставили информатику,в которой я ничего не понимаю :(

Запись в файл в бинарном режиме - C++
Есть файл, 1.exe, как его открыть чтоб можно было записать в него свой hex код ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru