|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
||||||
Функция поиска offset по hex значению в бинарном файле03.03.2023, 20:41. Показов 7995. Ответов 77
Всем доброго времени суток.
По названию темы понятно, наверное, что надо сделать. Начал своё дело с написания функции, которая конвертирует из hex в byte
Но для Windows и Linux нет одного метода. Для Linux можно использовать mmap, а вот для Windows что? Хотелось бы использовать один и тот же быстрый инструмент. Так как работа связана с большими файлами и поиск надо будет делать, как с начала так и с конца файла, да ещё и на слабых машинах, где ОЗУ < размера обрабатываемого файла, то mmap на Linux вряд ли поможет.
0
|
||||||
| 03.03.2023, 20:41 | |
|
Ответы с готовыми решениями:
77
Функции поиска в бинарном файле по номеру записи |
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
|
| 04.03.2023, 14:33 [ТС] | |
|
DrOffset, хде я писал про текст?!
Добавлено через 50 секунд Verevkin, выходной - дело святое) удачно отдохнуть, возвращайся в понедельник
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 04.03.2023, 14:34 | |||
|
но вообще вот: hex - текст.
0
|
|||
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
|
| 04.03.2023, 14:37 [ТС] | |
|
DrOffset, ну это как бы естественно и логично. Функции передаются hex значения в текстовом формате. И вы когда с Клавы вводите они тоже текстовые будут....
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 04.03.2023, 14:40 | ||||
|
И никакого отношения к тому, что вы там можете ввести с клавиатуры это не имеет.
0
|
||||
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
|
| 04.03.2023, 14:46 [ТС] | |
|
DrOffset, Потому что консоль не текст не воспринимает.
Всё естественно и логично. На функцию подаются 2 параметра, текстовые: 1 - путь к файлу (не текстовому), 2 - hex значение для поиска. Возвращает offset первого совпадения. Поэтому в моих словах и телодвижениях нет ничего противоречащего друг другу.
0
|
|
| 04.03.2023, 14:51 | |
|
0
|
|
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
|
| 06.03.2023, 21:51 [ТС] | |
|
DrOffset, ну это хорошо. Есть советы ещё в этом направлении?
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 06.03.2023, 22:09 | |
|
blackeangel, в посте #19.
0
|
|
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
||||||
| 08.03.2023, 18:47 [ТС] | ||||||
|
Не по теме: zayats80888, TheCalligrapher, а вы что остались в стороне? :D Добавлено через 2 часа 27 минут DrOffset, перечитал несколько раз этот пост и не понял, а как делать то поиск?
Добавлено через 56 минут или что или как? может не надо конвертить из hex в byte? тогда как читать файл в hex? или как? как вообще это сделать?!
0
|
||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||||||||
| 09.03.2023, 17:05 | ||||||||||||
read из <iostream>). Задача была проюллюстрировать описанный выше алгоритм.Написано под Linux (мне так удобнее), поэтому, и для экономии времени, я использую готовую GNU-функцию memmem. Для Windows нужен будет ее аналог. Ниже привожу каноничную реализацию на C (думаю, можно переписать ее с использованием SSE, если скорость поиска будет неудовлетворительной). Кликните здесь для просмотра всего текста
Также отмечу, что я не делал тут пользовательский ввод в hex, и перевод пользовательского ввода в байты. У вас это сделано, прикрутите сами. Вот основной код:
0
|
||||||||||||
| 31.03.2023, 13:22 | ||
|
Не по теме:
Мне надо как-то себя защитить от последующих претензий в стиле "Я тут вставил твой код в программу, которую я пишу для управления ядерным реактором, и у меня все взорвалось! Ты виноват в этом! Исправляй!". Это немного утрировано, но мне довольно часто приходилось подобное выслушивать. Это не отменяет того факта, что с вашей стороны было бы вежливо написать хотя бы о том, что именно вас не устраивает. Это было бы уважением к тому времени, что я потратил на ответ вам. На форумах не принято сбегать из темы без какого-то резюме, форум - это не QA support.
0
|
||
| 31.03.2023, 17:25 [ТС] | ||||
|
Не по теме:
0
|
||||
|
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
|
||
| 31.03.2023, 17:53 | ||
|
А есть другие варианты? Крикнуть АУ и ждать отклика?
0
|
||
| 31.03.2023, 18:00 | ||
|
Не по теме:
Алгоритмы поиска в строке Поиск подстроки в строке Это так, для общего развития.
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||||
| 31.03.2023, 18:57 | |||||||||
Сообщение было отмечено blackeangel как решение
РешениеДобавлено через 2 минуты Не по теме:
Добавлено через 3 минуты Кроме того, заранее, если бы развитие дискуссии было в нужном ключе, у меня заготовлен был улучшенный с точки зрения производительности пример этой функции. Вот он: Кликните здесь для просмотра всего текста
1
|
|||||||||
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
|||
| 31.03.2023, 19:23 [ТС] | |||
|
0
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 31.03.2023, 19:38 | |
|
blackeangel, для проверки нужно просто добавить функцию
memmem из кода под спойлером, чтобы остальной код ее увидел. И укажите какой-то реальный файл (для поиска), на котором будете проверять.Если будете запускать в MSVC, то надо указать #define _CRT_SECURE_NO_WARNINGS в самом начале файла. Это единственное изменение, которое нужно сделать. В MinGW работает как есть.
1
|
|
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
||
| 31.03.2023, 21:25 [ТС] | ||
|
DrOffset, у меня CLion, поэтому добавил функцию memmem из кода под спойлером. Спасибо
![]() Добавлено через 1 час 25 минут
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 31.03.2023, 23:40 | |
|
0
|
|
|
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
|
|
| 31.03.2023, 23:48 [ТС] | |
|
DrOffset, ваша принимает char* array, а "моя" возвращает vector<uint8_t>... Нужно либо конвертировать как то, либо переписывать hex2byte
0
|
|
| 31.03.2023, 23:48 | |
|
Функция поиска в бинарном дереве
Необычная функция в бинарном дереве поиска Методика поиска аналогичного кода бинарном файле нового релиза Функция, которая меняет строку в бинарном файле Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|