procedure TForm1.Button1Click(Sender: TObject);
var 
  i,ret : integer;
const
 buf :array [0..8] of byte= (12,34,56,78,90,12,34,56,78);
begin
      ret :=0;
     for i:=0 to 8 do 
        ret := ret*100+(buf[i] and $f0)* 10 +(buf[i] and $0f);
     caption := inttostr(ret);
end;我在跟踪的时候发现i的初始值是从9开始的,可程序是定i的初始值为0呀。你知道为什么??赶紧告诉我,我调了一天才发现的可疑之处。

解决方案 »

  1.   

    I未赋值
    ret :=0;I:=0;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i,ret : integer;
    const
     buf :array [0..8] of byte= (12,34,56,78,90,12,34,56,78);
    begin
          ret :=0;
         for i:=0 to 8 do
         begin
            ret := ret*100+(buf[i] and $f0)* 10 +(buf[i] and $0f);
            Memo1.Lines.Add(IntToStr(ret)+','+IntToStr(i));
         end;
    end;
    我是这样测试的,没有发现问题啊。
      

  3.   

    不是吧,你的断点设在 for 上了吧!那时 i 值还未确定呢
      

  4.   

    这不是错误!!!是你使用的Delphi编译器的优化选项了!!!去掉优化选项就没有这个问题了!!!
      

  5.   

    ret :=0;
         for i:=0 to 8 do
         begin
             listbox1.items.Add(inttostr(i))  ;
            listbox1.items.Add(inttostr(buf[i]))  ;
           // ret := ret*100+(buf[i] and $f0)* 10 +(buf[i] and $0f);
         end;
         caption := inttostr(ret);
    对的,没有你的情况发生呀
      

  6.   

    这是正常现象,这是Delphi优化的结果,不要管它