T086学习网 | 站长学院 | 技术文档 | 成语 | 歇后语 | 帝国时代 | 代码收藏 | IP地址查询 | 生活百科 | 生日密码 | CSS压缩 | 用户评论 | 欣欣百宝箱

16进制数转10进制数

【 不详作者:arbiter 更新时间:2004-05-04 | 字体:
[导读]说明: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>&...

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

  • 转载请注明来源:IT学习网 网址:http://www.t086.com/ 向您的朋友推荐此文章
  • 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系我们,我们会尽快予以更正。
更多
留言建议ASP探针PHP探针站长Enjoy的Blog
© 2017 T086学习网 - T086.com(原itlearner.com)
RunTime:18.84ms QueryTime:7