回 帖 发 新 帖 刷新版面

主题:[讨论]小弟写了一个十六进制转十进制的小程序,请多指教

procedure TForm1.Button1Click(Sender: TObject);
var
   changdu,wei,weiquan:short;  //changdu存放十六进制数的长度
   HexZhi :string;         //HexZhi用于存放十六进制数的值 因有A-F所以用string
   DecZhi :integer;            //deczhi用于存入十进制结果
   weiquanzhi:integer;         //位权值(weiquanzhi)用于存放该位的位权值
   weishu :integer;            //位数用于存放该位的十进制数值
begin
   edit1.Text:=uppercase(edit1.Text);//先将十六进制转为大写 便于处理
   changdu:=length(edit1.Text)-1;    //求出十六进制数的长度(不含H)
   HexZhi:=copy(edit1.Text,1,changdu);//将除H外的值取出
   HexZhi:=reversestring(HexZhi);//为便于处理,先左右调换顺序
   weiquanzhi:=1; //初始化weiquanzhi
   DecZhi:=0;  //初始化
   for wei:=1 to changdu do //循环处理第一位到最后一位,因左右换了顺序,所以
     begin                  //从左到右为低(个)位...高位
       if (ord(HexZhi[wei])>=48) and (ord(HexZhi[wei])<=57) then//通过决断该
         weishu:=strtoint(HexZhi[wei]) // 位的ASCII值若为0-9,则直接转换
       else
         case ord(HexZhi[wei]) of      //若A-F 则做相应的赋值
           65: weishu:=10;     //A的ASCII码为65 以下为B-F
           66: weishu:=11;
           67: weishu:=12;
           68: weishu:=13;
           69: weishu:=14;
           70: weishu:=15;
         else
          showmessage('输入有误!请重新输入');//若不是0-9,也不是A-F,则提示错误
         end;
         for weiquan:=2 to wei do  //计算该位的位权值,因个位为1,所以从2开始
           weiquanzhi:=weiquanzhi*16;
         DecZhi:=DecZhi+weishu*weiquanzhi;//
         weiquanzhi:=1; //要置1,因为下一位要重新计算
      end;
   edit2.Text:=inttostr(DecZhi); //将结果赋给edit2
end;

end.

回复列表 (共6个回复)

沙发

帮你顶下

板凳

你的有些麻烦
procedure TForm1.Button1Click(Sender: TObject);
begin
   edit2.Text :=inttostr( StrToInt('$' + (edit1.Text)));
end;

3 楼

请问
edit2.Text :=inttostr( StrToInt('$' + (edit1.Text)));
为何是这样?'$'有何意义?
谢谢!

4 楼

$表示十六进制

5 楼

我试了一下,这就好像一个函数,非常好用,那有没有用同样简单的方法将十进制转为十进制?

6 楼

十进制转换成十六进制 inttohex

我来回复

您尚未登录,请登录后再回复。点此登录或注册