说明:16进制数由1、2、3……9 及 a、b、c、d、e、f 组成 <form action="16to10.asp" method="post"> <input type="text" name="vars"> <input type="submit" name="Submit" value="提交"> </form> <% '如果输入的值不为空,运行程序 If Request("vars")<>"" Then '定义相关变量 Dim nums,tmp,tmpstr,i
nums=Request("vars") '取得从用户端输入进来的16进制数值 nums_len=Len(nums) '得出nums的长度
'开始循环,次数为nums的长度值 For i=1 To nums_len tmp=Mid(nums,i,1) '取出nums的第1个字符存放到临时变量tmp中 If IsNumeric(tmp) Then '如果tmp中的内容是数值型,则执行下面代码 tmp=tmp * 16 * (16^(nums_len-i-1)) '此为16进制数值型数据转化为10进制数值的公式 Else '限制输入的16进制数的范围在0--9及a--f之间 If ASC(UCase(tmp))<65 Or ASC(UCase(tmp))>70 Then Response.Write "你输入的数值中有非法字符,16进制数只包括1~9及a~f之间的字符,请重新输入。" Response.End End If tmp=(ASC(UCase(tmp))-55) * (16^(nums_len-i)) '此为16进制字符串型数据转化为10进制数值的公式 End If '将上面转化后的数值与tmpstr相加累计出总和 tmpstr=tmpstr+tmp Next Response.Write "16进制数"& Request("vars") & "转为10进制数是:" & tmpstr End If %>
重点说明:
tmp=tmp * 16 * (16^(nums_len-i-1)) tmp=(ASC(UCase(tmp))-55) * (16^(nums_len-i))
上面两句中,第一句是将16进制数值型数据转为10进制数据的,例如: 将16进制数3转成10进制,上面公式就如以下: 注:因为数值的长度是1,所以nums_len和i的值都是1 tmp=3 * 16 * (16^(1-1-1)) 得出结果为3
而第二句是将16进制字符型数据转为10进制数值,例如: 将16进制数a转成10进制,上面的公式就如以下: 因为UCase("a")或UCase("A")的结果都是等于"A",所以简化如下: →tmp=(ASC("A")-55) * (16^(1-1)) 因为ASC("A")的值为65,所以简化如下: →tmp=(65-55) * (16^(1-1)) 因为65-55的值等于10,所以简化如下: →tmp=10 * (16^(1-1)) 最后得出结果:10
看到这里,相信你应该有点明白了为什么16进制字符串型的数据转成10进制的数值要用上面的方法了吧。你可以将a,b,c,d,e,f都代入进去试一试,都是一一对应的。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|