unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    btn1: TButton;
    lbl1: TLabel;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}
 function HexToString(S: ansistring): ansistring;
var
  i: integer;
Begin
  Result := '';
  for i := 1 to Length(S) do
  begin
    if ((i mod 2)=1) then
    begin
      Result:=Result + ansistring(Chr(StrToInt('0x' + Copy(S, i, 2))));    end;
  end;
end;
 function HexScan(t:tstream; s:ansistring):integer;
  var
  i,j: integer;
  p: pansichar;
begin
 Result:=-1;
  getmem(p, t.size);       // ---- 分配内存
  t.readbuffer(p^, t.size ); // ---- 读
  for i:=0 to t.size -1 do
  begin
    for j:=1 to length(s) do
    begin
      if p[i+j]<>s[j] then  // ---- 有一个不同即退出
      begin
        break;
      end;
    end;
    if j>length(s) then    // ---- 依据
    begin
      Result:=i+1;
      break;
    end;
  end;
  freemem(p);
  t.seek(0, soBeginning);      // ---- 返回文件头
 end;procedure TForm1.btn1Click(Sender: TObject);
var
  MyFile: TFileStream;
  Code: ansistring;
  mm: ansistring;
  Addr: Integer;
begin
   MyFile:=TFileStream.Create('E:\1.exe', fmShareDenyNone);
   Code:='83C40484C07502B30184DB74598D9538F7FFFF5268E8030000';//确定这个exe中有这个特征码
   Addr:=HexScan(MyFile, HexToString(Code));
   mm:=HexToString(Code);
   if Addr<>0 then
    begin
      form1.lbl1.caption:=IntToStr(Addr);//这里的Addr没有返回地址 返回-1
    end;
end;end.
是在2010下的 ,原先的代码是delphi7下的,可以找到地址没问题
但是2010下无法找到,原先的string都转ansistring了,为什么还是不对呢?特征码