找到在字节数组中找到dword的最快方法
我有这个dword例如。我实现了一个方法,但它很慢,因为我将字节数组转换为十六进制字符串并将dword搜索为字符串,转换占用大部分时间!!
需要找到这个dword的位置 - > 01 49 08 EF 48 C0 C6 91
[(1, {'a': 'a', 'b': 'a'}),
(2, {'a': 't'}),
(3, {'b': 'g'}),
(4, {'a': 'c', 'b': 'g'})]
我需要在字节数组中找到双字快速搜索的位置而不进行转换!
答案 0 :(得分:2)
01 49 08 EF 48 C0 C6 91
为4个字节,因此DWORD
太大而无法成为单个DWORD
。它是2 (U)Int64
个值,或者是string
。
但无论如何,将数组转换为const
bytesToFind: array[0..7] of Byte = ($01, $49, $08, $EF, $48, $C0, $C6, $91);
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] = $01) 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;
绝对是错误的方法。只需按原样搜索原始数组数据,例如:
{{1}}