目的想让一个10进制的数字转化成16进制  然后再减去5  可是下面的代码使程序崩溃了
(有什么别的办法把10进制转成16进制吗??这个16进制必须能进行加减运算 不能象inttohex那样只是返回一个字符串)
procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
  i,j,k:integer;begin
  i:=4517944;
  s:=inttohex(i,j);  //inttohex函数返回的是string  
  k:=strtoint(s);    //然后把他转成10进制  程序就挂了
  edit1.text:=s;end;

解决方案 »

  1.   

    这句里有k:=strtoint(s);    //这句里有‘A B ...F’等字符,肯定挂
    strtoint这个函数不能使16进制转换为10进制
      

  2.   

    从16进制到10进制可以使用以下函数function TMainForm.HexToInt(SourceHex: String): Integer;
    Var
        Tmp:String;
        i,Count,MoIn,DescIn,HexNum,N:Integer;
    begin
        Try
            i:=0;
            MoIn:=0;
            DescIn:=0;
            Count:=Length(SourceHex);
            For i:=Count downto 1 do
            begin
                Tmp:=Copy(SourceHex,i,1);
                HexNum:=HexWordToInt(Tmp);
                if HexNum<>0 then
                begin
                    MoIn:=HexNum*Floor(IntPower(16,Count-i));
                    if DescIn=0 then
                        DescIn:=MoIn
                    else
                        DescIn:=DescIn+MoIn;
                end;
            end;
            Result:=DescIn;
        Except
            Result:=0;
        end;
    end;
      

  3.   

    同意楼上。k:=strtoint(s);    //然后把他转成10进制  程序就挂了
    你的这句注释有问题,计算机里头哪有什么“10”进制的integer啊?内存都是二进制表示的。只有“字符串”才有“几进制”这个说法。你想把16进制字符串直接转换成整数,而偏偏strtoint又只能识别十进制字符串,不挂就怪了。
      

  4.   

    strtoint('$'+s);//s为十六进制字符串
      

  5.   

    HexWordToInt  floor  这2个函数没定义??