|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
||||||
Функция поиска offset по hex значению в бинарном файле03.03.2023, 20:41. Показов 7950. Ответов 77
Всем доброго времени суток.
По названию темы понятно, наверное, что надо сделать. Начал своё дело с написания функции, которая конвертирует из hex в byte
Но для Windows и Linux нет одного метода. Для Linux можно использовать mmap, а вот для Windows что? Хотелось бы использовать один и тот же быстрый инструмент. Так как работа связана с большими файлами и поиск надо будет делать, как с начала так и с конца файла, да ещё и на слабых машинах, где ОЗУ < размера обрабатываемого файла, то mmap на Linux вряд ли поможет.
0
|
||||||
| 03.03.2023, 20:41 | |
|
Ответы с готовыми решениями:
77
Функции поиска в бинарном файле по номеру записи |
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 31.03.2023, 23:58 | |
|
blackeangel, а передать (char*)&vector[0] ?
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 01.04.2023, 00:34 | ||
|
Вариант 2) Можно просто переделать мою функцию так, чтобы она принимала vector<char> - это делается элементарно.
0
|
||
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
||||||||
| 01.04.2023, 10:53 [ТС] | ||||||||
|
DrOffset,
![]() Вариант 2 не рассматривается, потому что char array правильная подача на эту функцию, с моей точки зрения. SmallEvil,
0
|
||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||||||||||
| 01.04.2023, 11:34 | ||||||||||||||
blackeangel, возьмите себе за правило тщательно изучать документацию и интерфейс тех средств, которыми вы пользуетесь. Это избавит от многих вопросов в будущем. Добавлено через 6 минут
std::vector<char> и не std::vector<uint8_t>, от этого вы ничего не потеряете.
1
|
||||||||||||||
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
|
| 02.04.2023, 22:53 [ТС] | |
|
DrOffset, всё отлично работает, спасибо.
![]() А как изменить что б поиск шёл с конца файла? ![]() А для того чтобы переделать в надо вместо return добавлять в вектор, например, а потом его возвращать? Добавлено через 1 минуту Просто у меня по задумке опционально: по умолчанию поиск с начала и первое совпадение, поиск с конца и первое совпадение, и поиск всех совпадений
0
|
|
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
|
| 03.04.2023, 18:20 [ТС] | |
|
Опечатался в вопросе.
Для того чтобы найти все совпадения надо return заменить на добавление в вектор? Ну и функцию переделать, чтоб она возвращала вектор, соответственно...
0
|
|
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
||||||
| 04.04.2023, 20:45 [ТС] | ||||||
|
DrOffset, сделал чтоб искал все совпадения и первое. Как сделать чтобы искал с конца?!
Кликните здесь для просмотра всего текста
0
|
||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 04.04.2023, 20:50 | ||
|
0
|
||
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
|
| 04.04.2023, 20:56 [ТС] | |
|
DrOffset, конечно будет актуально. Поиск информации ни к чему хорошему не привёл. Поиск с конца файла что то не очень любят...
0
|
|
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
|
| 11.04.2023, 14:58 [ТС] | |
|
DrOffset, всё ещё актуально
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||
| 12.04.2023, 12:00 | |||||||
Сообщение было отмечено blackeangel как решение
Решение
![]() Тут осталась одна особенность, которую надо исправить. memmem все еще ищет в прямом порядке. Т.е. надо заменить ее вызов на нечто, что будет искать с конца буфера. Остальной код не поменяется.
1
|
|||||||
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
|
| 12.04.2023, 12:04 [ТС] | |
|
DrOffset, не, менять не надо, всё так. Мы идём с конца файла, а ищем в прямой последовательности. А не в обратной.
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||
| 12.04.2023, 12:13 | ||||||
|
blackeangel, просто если задача этого поиска найти самое последнее вхождение последовательности, то этот код выдаст неверный результат, если в файле например вот так:
0
|
||||||
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
||
| 12.04.2023, 14:48 [ТС] | ||
|
DrOffset, нет, задача найти самое первое, но с конца файла
Добавлено через 2 минуты DrOffset, то есть мы читаем в буфер с конца файла, по буферу идёт прямой поиск... Добавлено через 2 часа 8 минут DrOffset, понял, про что вы имели в виду. Если буфер большой и в него помещается несколько искомых значений, то тогда он выдаст первое найденное в буфере. Вы об этом? Тогда как костыльное решение может быть это использование размера буфера равное 2 длины искомого, ТК буфер же из 2х частей.. Добавлено через 18 минут DrOffset,
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||||
| 12.04.2023, 17:06 | |||||||||
|
Добавлено через 1 час 1 минуту blackeangel,
1
|
|||||||||
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
|
| 12.04.2023, 20:57 [ТС] | |
|
DrOffset, всё работает отлично! Спасибо вам огромное за помощь!
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 12.04.2023, 21:06 | |
|
blackeangel, не за что
0
|
|
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
|
| 25.04.2023, 08:56 [ТС] | |
|
DrOffset, здравствуйте. После долгих проб, заметил 2 вещи:
1. функция, которая ищет с конца - не находит то что находит на 0й позиции ( 0х0, то есть самый первый байт файла) 2. Функция, которая ищет все совпадения не находит последнее. Где, что не так?
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||||||||
| 25.04.2023, 13:03 | |||||||||||||
0
|
|||||||||||||
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
|||||||||||
| 25.04.2023, 13:43 [ТС] | |||||||||||
|
DrOffset, тут пост 47 (https://www.cyberforum.ru/post16843154.html). Вашу функцию по прямому поиску сделал чтобы все найденные значения в файле складывала в вектор, а потом уже возвращала его. Но, она находит на i-1 значение. То есть самое последнее совпадение(оно же самое первое нос конца файла) не находит. Либо просто игнорирует или поиск во второй половине буфера не происходит...
Добавлено через 4 минуты DrOffset, после замены на
Вывод вот
0
|
|||||||||||
| 25.04.2023, 13:43 | |
|
Функция поиска в бинарном дереве
Необычная функция в бинарном дереве поиска Методика поиска аналогичного кода бинарном файле нового релиза Функция, которая меняет строку в бинарном файле Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
|
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
|
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
|
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
|
|
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
|
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока
Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
|
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов
• Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp
• Смежный проект:. . .
|
22. Подключение слоя системной динамики (потоковые диффуры): экономические метрики модели
anaschu 17.06.2026
Апдейт модели: финансовый контур, разделение затрат
Продолжаю развивать модель рабочего коллектива на AnyLogic. В этот раз работа шла над агентом Экономика — финансовым SD-слоем модели. Задача:. . .
|