Поиск повторяющейся строки в шестнадцатеричном файле - PullRequest
0 голосов
/ 20 сентября 2019

У меня относительно небольшой шестнадцатеричный файл, мне нужно найти шаблон с помощью matlab и отметить адреса каждого повторения.

Файл имеет размер 512 КБ;Я знаю только формат шаблона, который я ищу (длиной 16 байт), и я знаю, что он повторяется только 2 или 3 раза только во всем файле.

Полагаю, мне нужно создать строкусодержащие следующие 15 байтов для каждой позиции, затем сохраните и сравните их со всеми предыдущими строками, пока программа просматривает файл?я не уверен, что это даже эффективный процесс, и большая часть информации, которую я смог найти в Интернете для решения этой проблемы, в основном связана с обработкой текстовых документов.

Спасибо :))

1 Ответ

1 голос
/ 20 сентября 2019

Это похоже на то, для чего вы могли бы довольно легко использовать регулярные выражения.Первое, что нужно сделать, это загрузить файл в MATLAB в шестнадцатеричном формате и преобразовать его в шестнадцатеричную строку:

fid = fopen(filename);
bindata = fread(fid,'*uint8'); % Reads the data into an array of type uint8
fclose(fid);
hexstr = sprintf('%x',bindata); % Converts the binary data to a hex string

Это даст вам строку, содержащую данные файла в шестнадцатеричном формате, дляэкземпляр "4d41544c414220352e30...".Тогда довольно просто использовать регулярные выражения для поиска вашей шестнадцатеричной строки:

startlocs = regexp(hextr,pattern);

Где pattern - это искомая строка.startlocs даст вам начальное местоположение каждого из экземпляров шестнадцатеричного шаблона (в байтах, начиная с 1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...