Найти шаблон в двоичном файле? - PullRequest
1 голос
/ 10 марта 2012

Я написал функцию ниже, чтобы найти шаблон в тексте:

bool match(char* patt,char* text){ 

    int textLoc=0, pattLoc=0, textStart=0;  

    while(textLoc < (int) strlen(text) && pattLoc < (int)strlen(patt)){ 

        if( *(patt+pattLoc) == *(text+textLoc) ){     
            textLoc= textLoc+1;          
            pattLoc= pattLoc+1;      
        }   
        else{          
            textStart=textStart+1;  
        textLoc=textStart;           
        pattLoc=0;   
        }     
    }   


    if(pattLoc >=    (int) strlen(patt)) 
        return true;  
    else return false; 

} 

Как оказалось, функция принимает два параметра типа char*.Я хотел бы использовать эту функцию, чтобы найти шаблон в binary file, что вы предлагаете для решения этой проблемы?

Ответы [ 3 ]

1 голос
/ 10 марта 2012

Мне кажется, что вы пытались реализовать популярную функцию strstr самостоятельно. Но это вам не поможет, так как вы попросили найти шаблон binary . Функция, которую вы должны использовать в этом случае, называется memmem.

1 голос
/ 10 марта 2012

Вы говорите больше, как будто вы ищете лучший способ найти шаблоны в файлах.Если это так, то есть очень хороший документ для проверки одного и нескольких шаблонов:

Учитывая шаблон P = a1a2 ... an, Fnd все вхождения P в тексте T = b1b2 ...bm.

Расширение для случаев с несколькими частями: заданный набор шаблонов, P1, P2, ..., Pl,

Найти все вхождения P в тексте T = b1b2 ... bm.

Вы можете проверить этот документ для простого объяснения и этот для более подробных и различных реализаций / кодов.

1 голос
/ 10 марта 2012

Здесь нет правильного или неправильного.Единственное отличие, которое я хотел бы рассмотреть, заключается в использовании подхода буфера / размера вместо строк.

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

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

...