如何在流中搜索十六进制?

bab*_*you 5 delphi

如何高效快速地搜索流中的十六进制?
如果码流很大,如何在码流中快速搜索并调整位置?

function FindInMemStream(Stream: TMemoryStream; What: String):Integer;
var
  bufBuffer, bufBuffer2: array[0..254] of Char;
  i: Integer;
begin
  Result := 0;
  i := 0;
  FillChar(bufBuffer, 255, #0);
  FillChar(bufBuffer2, 255, #0);
  StrPCopy(@bufBuffer2, What);
  Stream.Position:=0;
  while Stream.Position <> Stream.Size do
  begin
    Stream.Read(bufBuffer[0],Length(What));
    if CompareMem(@bufBuffer,@bufBuffer2,Length(What)) then
    begin
      Result := Stream.Position-Length(What);
      Exit;
    end;
    i := i + 1;
    Stream.Seek(i,0)
  end;
end; 
Run Code Online (Sandbox Code Playgroud)

我想将函数更改为serch hex,这个函数有效吗?你能给我一个高效的十六进制搜索功能吗?

Meh*_*ide 3

我已经改编了 system.pas 中可用的 POS 函数的代码:) 如果您需要找到一些十六进制,您可以使用如下:

PosHex(#$15#$AA#$04, MyStream);
Run Code Online (Sandbox Code Playgroud)
PosHex(#$15#$AA#$04, MyStream);
Run Code Online (Sandbox Code Playgroud)