快速找到字节数组中的 DWORD 位置 delphi

Fast find a DWORD position in array of byte delphi

寻找在字节数组中查找双字的最快方法

例如,我有这个双字。我实现了一个方法但是它很慢,因为我将字节数组转换为十六进制字符串并将双字搜索为字符串,转换占用了大部分时间!!

need to find pos of this dword --> 01 49 08 EF 48 C0 C6 91

var
 myarray:array of byte;
 p:integer;
begin
 p:= pos('014908EF48C0C691',array2hex(myarray));
end;

我需要在不进行转换的情况下在字节数组中找到双字快速搜索的位置!

一个DWORD是4个字节,所以01 49 08 EF 48 C0 C6 91作为一个DWORD太大了。它要么是 2 DWORD 个值,要么是一个 (U)Int64.

但无论哪种方式,将数组转换为 string 绝对是错误的方法。只需搜索原始数组数据 as-is 即可,例如:

const
  bytesToFind: array[0..7] of Byte = (, , , $EF, , $C0, $C6, );
var
  myarray: array of byte;
  I, FoundAtIndex, Len: integer;
begin
  myarray := ...;
  Len := Length(myarray);
  FoundAtIndex := -1;
  for I := 0 to Len-8 do
  begin
    if (myarray[I] = ) and
       ((I+8) <= Len) and
       CompareMem(@myarray[I], @bytesToFind, 8) then
    begin
      FoundAtIndex := I;
      Break;
    end;
  end;
  if FoundAtIndex <> -1 then
  begin
    // use FoundAtIndex as needed...
  end else
  begin
    // not found...
  end;
end;