|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
||||||
Функция поиска offset по hex значению в бинарном файле03.03.2023, 20:41. Показов 8104. Ответов 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 | |
|
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 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
|
||||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||||||||||||||
| 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
|
||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 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
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||||
| 12.04.2023, 12:00 | |||||||
Сообщение было отмечено blackeangel как решение
Решение
![]() Тут осталась одна особенность, которую надо исправить. memmem все еще ищет в прямом порядке. Т.е. надо заменить ее вызов на нечто, что будет искать с конца буфера. Остальной код не поменяется.
1
|
|||||||
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
|
| 12.04.2023, 12:04 [ТС] | |
|
DrOffset, не, менять не надо, всё так. Мы идём с конца файла, а ищем в прямой последовательности. А не в обратной.
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||||||
| 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
|
||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||||||
| 12.04.2023, 17:06 | |||||||||
|
Добавлено через 1 час 1 минуту blackeangel,
1
|
|||||||||
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
|
| 12.04.2023, 20:57 [ТС] | |
|
DrOffset, всё работает отлично! Спасибо вам огромное за помощь!
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|
| 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
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||||||||||
| 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 | |
|
Функция поиска в бинарном дереве
Необычная функция в бинарном дереве поиска Методика поиска аналогичного кода бинарном файле нового релиза Функция, которая меняет строку в бинарном файле Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|