4
如何在流中搜索十六進制高效且快速?
如果流很大,如何在流中快速搜索並重新定位?如何在流中搜索十六進制?
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;
我想將函數更改爲serch hex,這個函數是否有效?你能給我一個有效的功能來切割十六進制嗎?
你應該重新格式化您的代碼,這是非常很難閱讀。 – 2012-01-05 11:08:58
如果未格式化,則效率不高。 – m0skit0 2012-01-05 11:09:48
你不是在尋找一個十六進制,你正在搜索一個字符串,也許你可以從看Boyer-Moore搜索算法中受益。它允許你跳過搜索的文本,而這個算法前進字符。 – 2012-01-05 11:13:46