如何在在二进制文件中查找$6D6F7374这个子串并返回指针的位置

解决方案 »

  1.   

    我写了一个完整的函数如下function GetPos():int64;
    const
      ConBytes=4;
      ConFileN='d:\test\test.bin';
      ConFindS=#$6D#$6F#$73#$74;
    var
      ff:TMemoryStream;
      buffer:array[0..ConBytes-1] of byte;
      buffer2:array[0..2*ConBytes-1] of byte;
      i,size:int64;
      j:byte;
    begin
      result:=-1;  //表示未找到
      ff:=TMemorystream.create;
      ff.LoadFromFile(ConFileN);
      size:=ff.size;
      i:=0;
      for j:=0 to ConBytes-1 do
        buffer2[j]:=0;
      while i <size do
      begin
        ff.read(buffer,ConBytes);
        for j:=0 to ConBytes-1 do
          buffer2[j+ConBytes]:=buffer[j];
        j:=pos(ConFindS,pchar(@buffer2));
        if j>0 then
        begin
          result:=i+j-ConBytes-1;    //从0开始的相对于文件头的偏移量
          break;
        end;
        for j:=0 to ConBytes-1 do
          buffer2[j]:=buffer[j];
        inc(i,ConBytes);
      end;
      ff.free;
    end;