首页 > 开发 > 综合 > 正文

16进制数转10进制数

2020-10-03 20:21:58
字体:
来源:转载
供稿:网友

说明: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都代入进去试一试,都是一一对应的。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表