說明: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都代入進去試一試,都是一一對應的。
新聞熱點
疑難解答