przeszukiwanie w pamięci ciagów hex

0

witam
chciałbym napisać funkcje do przeszukiwania pamięci

zakładamy że mamy ciąg
hex
0x10 0x00 0x23 0x53 0xEE 0xEE 0x1b x00 0x76 0xEE 0xEE

funkcja miałaby być wywolana z parametrami:

char *buf - wskaznik na adres przeszukiwanego ciągu
int dlugosc_ciagu - długość przeszukiwanego ciągu
char *szukany - wskaznik na adres pszukanego ciągu
int dług_szukanego - długość przeszukiwanego ciągu
char *tablica - wskażnik na tablice przechowującą adresy znalezionych ciągów

funkcja zwracalaby ilość powtórzeń ( int ilosc)

chciałbym uzyskać porade czy istnieją juz podobne funkcje czy musze ją sam napisać

jak napisać żeby kod był optymalny pod wzgędem prędkości wykonania.

Czy obróbka po jednym bajcie jest sensowna

Dziękuje z góry za wszelkei uwagi zwłaszcza krytyczne :)

p.s niestety za młodu zostałem skażony pascalem dlatego rzeczy proste w c++ dla inych dla mnie są jeszce niewiadomą

1

char *buf - wskaznik na adres przeszukiwanego ciągu
int dlugosc_ciagu - długość przeszukiwanego ciągu
char *szukany - wskaznik na adres pszukanego ciągu
int dług_szukanego - długość przeszukiwanego ciągu
char **tablica - wskażnik na tablice przechowującą adresy znalezionych ciągów
int rozmiar - rozmiar tablicy przechowującej adresy znalezionych ciągów

użyj memchr i memcmp, wyszukujesz pierwszy znak od niego porównujesz całość.

0

bardzo dziękuje za podpowiedź, mam tylko pytanie czy nie istnieje nic do przeszukiwania pamieci dluzszego niz jeden bajt ?

0

Jest ale dla cstring'ów

0

niestety bede operował na róznych wartosciach np 0x00

0

Jest taka funkcja memmem, ale nie jest ona zdefiniowana w standardzie. Jeżeli korzystasz z Linuksa i nie planujesz innych platform to możesz z niej skorzystać.

0

własnie popełniłem taki kod
ma przeszukiwac blok w pamieci wielokrotnie wykonyjac za kazym znalezieniem jakas instrukcje
Pierwsza bajt pozycja 0 została celowo pominięta

Pytanko czy to jest OK ? :)

mamy buf(wskazuje adres w pamieci) i len(dlugosc bloku danych)

int pozycja=0;

do {
pch = (char*) memchr (buf+pozycja+1, 0xee, len-pozycja);

 if (pch) {pozycja=pch-str;
    // cos zrobic jezeli znaleziono
  }

} while (pch)

0

no nie moge pisałem to akurat w notatniku :X

1 użytkowników online, w tym zalogowanych: 0, gości: 1