主题:[讨论]小弟写了一个十六进制转十进制的小程序,请多指教
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.
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.