读书人

byte数组查找数据段算法,该如何解决

发布时间: 2012-02-21 16:26:23 作者: rapoo

byte数组查找数据段算法
buffer:array[0..255] of byte;
我要在这个数组中查找比如[$13,$0,$10,$0]一段数组该如何写算法,或者给个思路
当然我可以用 for do + if then 来实现,但如果要查找别的数组段就麻烦了


[解决办法]
上面的调用,有一点点需要改正的地方:(下面是改正后)

for I := Low(Buffer) to High(Buffer)-SizeOf(SubBuf)+1 do
if SysUtils.CompareMem(@Buffer[I], @SubBuf[Low(SubBuf)], SizeOf(SubBuf)) then
ShowMessage(Format( '找到一段,起始处位于%d号元素 ',[I]));


楼主及上面各位朋友,试一下 CompareMem 吧!其实就是 C/C++ 里的 memcmp 函数。实在是好用啊,直接对内存块进行比较。
[解决办法]
function PosMemEx(subBuf, Buf : array of byte; Offset: Cardinal = 0):Integer;
var
I : Integer;
begin
Result:=-1;
for I := Low(Buf) + Integer(Offset) to High(Buf)-SizeOf(SubBuf)+1 do
if SysUtils.CompareMem(@Buf[I], @SubBuf[Low(SubBuf)], SizeOf(SubBuf)) then
begin
Result:=I;
break;
end;
end;

读书人网 >.NET

热点推荐