procedure TForm1.btn1Click(Sender: TObject);
  var
  InitValueList:TStringList;
  i,j:Byte;
  str,adata:string;
begin
  InitValueList:=TStringList.Create;
  InitValueList.Delimiter:=',';
  InitValueList.DelimitedText :=edit1.Text;
  i:=Length(StringReplace(edit1.text,#32,'',[rfReplaceAll])) div 2;
 for j:= 1 to i do
 begin
  adata:=IntToHex(StrToInt('$'+Copy(adata,Length(adata)-1,2))+StrToInt('$'+InitValueList.Strings[i-1]),2);
 end; Edit2.Text:=Copy(adata,Length(adata)-1,2); end;这是我自己写的一段,edit1输入'11  22',click之后报错
请大家指出我的错误.
谁有更好的算法,也请提供给我参考.
学习中,不胜感激

解决方案 »

  1.   

    不明白程序的意图,但是明显的错误看到。IntToHex(StrToInt('$'+Copy(adata,Length(adata)-1,2))
    这里adata开始时没有值,这句一定出异常。
      

  2.   

    哦 用adata:=''也是一样的
    我就是想求一组16进制数的累加和
    比如 '11 22 33 44 55'
    累加和为A5
      

  3.   


    uses
      math;
    procedure TForm1.Button4Click(Sender: TObject);
     var
      InitValueList:TStringList;
      i:Byte;
      arr:array of integer;
    begin
      InitValueList:=TStringList.Create;
      InitValueList.Delimiter:=',';
      InitValueList.DelimitedText :=edit1.Text;
      setlength(arr,initvaluelist.Count);
      for i:=0 to initvaluelist.Count-1 do
      begin
        arr[i]:=strtoint(trim(initvaluelist.Strings[i]));
      end;
      edit2.Text:=inttohex(sumint(arr),4);
    end;
      

  4.   

    我测试时
    edit1中内容
    11, 22, 33, 44, 55
      

  5.   


    var
        InitValueList:TStringList;
        i,j:Byte;
        value:integer;
    begin
        InitValueList:=TStringList.Create;
        InitValueList.Delimiter:=',';
        InitValueList.DelimitedText :=edit1.Text;
        i:=InitValueList.Count;
        value:=0;
        for j:= 0 to i-1 do
            value:=value+StrToInt('$'+InitValueList.Strings[j]);
        Edit2.Text:=Format('%x',[value]);
    end;
      

  6.   

    edit1中内容 
    11, 22, 33, 44, 55