Im Prinzip läuft alles auf einen Byte-Vergleich hinaus.
Delphi-Quellcode:
var
Daten, Suche: TBytes;
i, i2: Integer;
B: Boolean;
for i := 0 to Hight(Daten) - High(Suche) do // for i := 0 to Hight(Daten) - (Length(Suche) - 1) do
for i2 := 0 to High(Suche) do
if Daten[i] <> Suche[i2] then
Break
else if i2 = High(Suche) then
Gefunden(i);
Die innere Schleife kann man z.B. durch CompareMemory ersetzen
und noch an anderen Stellen bissl optimieren, aber im Prinzip macht so ein Such-Code immer das Gleiche.
Delphi-Quellcode:
for i := 0 to Hight(Daten) - High(Suche) do begin
{$REGION 'umgedrehte Suchlogik sie Antwort #6'}
B := False;
for i2 := 0 to High(Suche) do
if Daten[i] <> Suche[i2] then
Break
else if i2 = High(Suche) then
B := True;
{$ENDREGION}
if B then
Gefunden(i);
end;
Delphi-Quellcode:
for i := 0 to Hight(Daten) - High(Suche) do
if CompareMemory(@Daten[i], @Suche[0], Length(Suche)) then
Gefunden(i);