Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Пример поиска байтовой строки в файле
Сегодня практический пример и относиться к управлению двоичными файлами. Статья по сути относится к подборке
Я давно обещал написать об этом, но увлёкся библиотекой os. А материалы по os ещё не закончились и я решил не много отвлечься.
О чём собственно речь. Есть двоичный файл произвольной длины. Нужно найти первое вхождение данной байтовой строки. Т.е. программа должна выдать смещение строки от начала файла или -1 если строка не найдена. Есть один важный момент. Файл может быть очень длинным и считывание его в переменную будет не рационально. Значит нужно считывать порциями и искать в каждой порции отдельно.
И так читать придётся последовательно в буфер и искать в нём. Ну сам поиск не сложный, можно и для байтовой строки использовать известные методы, в частности find(). Но есть один нюанс. Искомая строка может оказаться на стыке между двумя частями файла, попадающими в разные буферы. Решить эту проблему не сложно. После очередного чтения в буфер и поиске в нём нужно просто сдвинуть указатель в сторону начала файла на длину байтовой строки. При этом, конечно, длина буфера должна быть больше длины строки.
Описанный словесно алгоритм представлен в программе ниже.
Ну а в заключении приведу пример программы вывода содержимого файла в виде таблицы байтов в шестнадцатеричном представлении. Программа может вам пригодиться для работы с двоичными файлами.
Фрагмент вывода программы
Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.