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

时间:2018-03-18 23:40:24

标签: delphi-2010

找到在字节数组中找到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'})]

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

1 个答案:

答案 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}}