подскажите пожалуйста какой-нибу оптимальный алгоритм поиска последовательностей байт в массиве байтов. условия: есть массив байтов есть несколько последовательностей байтов, а также строки в юникоде которые можно предмтавить как последовательность байтов надо определить какая строка встречается в этом массиве строки длинные и все разных размеров
что-то вроде такого. давно не брался за си, могут быть глюки и опечатки. Код (Text): UINT check(BYTE* array, BYTE** patterns, UINT patterns_count, UINT at) { int l; for (i=0; array[l]; l++); for (UINT i=at, i<patterns_count; i++) { UINT n, k; for (n=0; pattern[i][n]; n++); if (l>=n) for (UINT j=0; j<=l-n; j++) for (k=0; k<l; k++) if (pattern[i][j+k]!=array[k]) break; if (k==l) return i; } return patterns_count; }
могу предложить такое...) Код (Text): ////////////////////////////////////////////////////////////////////////// BOOL utilsCompareData(const BYTE* pData, const BYTE* bMask, const char* pszMask) { for(;*pszMask; ++pszMask, ++pData, ++bMask) if(*pszMask == 'x' && *pData !=* bMask ) return FALSE; return (*pszMask) == 0; } ////////////////////////////////////////////////////////////////////////// DWORD utilsFindPattern(DWORD dwAddress, DWORD dwLen, BYTE *bMask, char * pszMask) { for(DWORD i=0; i < dwLen; i++) if(utilsCompareData((BYTE*)( dwAddress+i ), bMask, pszMask )) return (DWORD)(dwAddress + i); return 0; } юзать например так: target = utilsFindPattern(start_search, search_max, (BYTE*)"invalid sound %i", "xxxxxxxxxxxxxxxx"); на месте каждого x можно поставить ? (или любой другой чар) - т.е. что этот байт неизвестен