var FileBuff: TBytes; Pattern: TBytes; begin FileBuff := filetobytes(filename); Result := CompareMem(@Pattern[0], @FileBuff[0], Length(Pattern)); end;
Есть ли такая функция, как
Result := Pos(@Pattern[0], @FileBuff[0]);
Я думаю, что это делает:
function BytePos(const Pattern: TBytes; const Buffer: PByte; const BufLen: cardinal): PByte; var PatternLength: cardinal; i: cardinal; j: cardinal; OK: boolean; begin result := nil; PatternLength := length(Pattern); if PatternLength > BufLen then Exit; if PatternLength = 0 then Exit(Buffer); for i := 0 to BufLen - PatternLength do if PByte(Buffer + i)^ = Pattern[0] then begin OK := true; for j := 1 to PatternLength - 1 do if PByte(Buffer + i + j)^ <> Pattern[j] then begin OK := false; break end; if OK then Exit(Buffer + i); end; end;
Напишите свой собственный.Оптимизация не может быть выполнена при поиске только одного байта, поэтому любая реализация, которую вы обнаружите, в основном сделает то же самое.
Записано в браузере:
function BytePos(Pattern:Byte; Buffer:PByte; BufferSize:Integer): Integer; var i:Integer; begin for i:=0 to BufferSize-1 do if Buffer[i] = Pattern then begin Result := i; Exit; end; Result := -1; end;