Найти HEX паттерны и количество вхождений - PullRequest
3 голосов
/ 15 декабря 2009

Я хотел бы найти шаблоны и отсортировать их по количеству вхождений в имеющемся у меня файле HEX.

Я не ищу какой-то конкретный паттерн, просто собираю статистику происходящих там событий и сортирую их.

DB0DDAEEDAF7DAF5DB1FDB1DDB20DB1BDAFCDAFBDB1FDB18DB23DB06DB21DB15DB25DB1DDB2EDB36DB43DB59DB32DB28DB2ADB46DB6FDB32DB44DB40DB50DB87DBB0DBA1DBABDBA0DB9ADBA6DBACDBA0DB96DB95DBB7DBCFDBCBDBD6DB9CDBB5DB9DDB9FDBA3DB88DB89DB93DBA5DB9CDBC1DBC1DBC6DBC3DBC9DBB3DBB8DBB6DBC8DBA8DBB6DBA2DB98DBA9DBB9DBDBDBD5DBD9DBC3DB9BDBA2DB84DB83DB7DDB6BDB58DB4EDB42DB16DB0DDB01DB02DAFCDAE9DAE5DAD9DAE2DAB7DA9BDAA6DA9EDAAADAC9DACADAC4DA92DA90DA84DA89DA93DAA9DA8CDA7FDA62DA53DA6EDA

Вот выдержка из файла HEX, и в качестве примера я хотел бы получить:

XX вхождений BDBDBD

XX вхождений B93D

Есть ли способ добывать файл для генерации этого вывода?

Ответы [ 3 ]

2 голосов
/ 15 декабря 2009

Конечно. Используйте скользящее окно для создания счетчиков (ссылка для Perl, но она кажется достаточно общей, чтобы понять алгоритм). Ваши шаблоны называются N-грамм . Вы должны будете ограничить максимальный паттерн.

1 голос
/ 15 декабря 2009

Это довольно классическая проблема CS. Код в целом является нетривиальным для реализации, так как он потребует как минимум один полный анализ последовательности, а в зависимости от вашей эффективности и ограничений памяти / процессора может потребоваться несколько. Смотрите здесь .

Вам нужно будет каким-то образом разбить входную строку, чтобы убедиться, что вы получили хорошую подпоследовательность.

Если есть конкретная проблема, мы могли бы помочь больше, но общая стратегия изложена в статье Википедии выше.

0 голосов
/ 15 декабря 2009

Вы можете использовать регулярные выражения для создания шаблона для поиска.

Необходимое регулярное выражение будет очень простым. Просто используйте именно ту фразу, которую вы ищете. Тогда должна быть функция регулярного выражения на языке, который вы используете (вы не указали), который может подсчитывать количество совпадений.

Используйте это, чтобы создать простой счетчик.

...