Una primera aproximacion sería algo como esto:
Código Delphi
[-]
function Buscar(Archivo: String; Sub: Pointer; Count: int64): int64;
var
P: PByte;
i: int64;
begin
Result:= -1;
with TMemoryStream.Create do
try
LoadFromFile(Archivo);
if Size < Count then
Exit;
i:= 0;
P:= Memory;
while (not CompareMem(Sub,P,Count)) and (i < Size) do
begin
inc(P);
inc(i);
end;
if i < Size then
Result:= i;
finally
Free;
end;
end;
var
Buffer: Array[1..6]of Byte;
begin
Buffer[1]:= $00; Buffer[2]:= $F5; Buffer[3]:= $02;
Buffer[4]:= $40; Buffer[5]:= $00;
ShowMessage(IntToHex(Buscar('d:\1.dat',@Buffer,5),8));
end;
La función buscar, nos devuelve la posición de la cadena que buscamos, o -1 si no la encuentra. La única desventaja es que cargamos todo el archivo en memoria y si el archivo es muy grande (un par de decenas de megas) puede resultar un problema.