16进制数转10进制数

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

相关文章

在正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信...
&gt; [合辑地址:MySQL全面瓦解](https://www.cnblogs.c...
物理服务机的CPU、内存、存储设备、连接数等资源有限,某个时...
1 回顾 上一节我们详细讲解了如何对数据库进行分区操作,包括...
navicat查看某个表的所有字段的详细信息 navicat设计表只能一...
文章浏览阅读4.3k次。转载请把头部出处链接和尾部二维码一起...