合肥工商局网站:编一个程序使输入二.八.十六进制数输出十进制数
来源:百度文库 编辑:神马品牌网 时间:2024/10/06 09:39:51
ToBase10 函数实现了你所说的功能。
number 是要转换的数字,fromBase 是 number 的进制。
如果 number 是含有字符的十六进制数,调用 ToBase10 时必须用引号把它围起来。 比如:
result = ToBase10(“40ACF”,16)
map 是一个关联数组,目的是为十六进制数和十进制数做一对一的挂钩。
Split()把它的字符串参数切成个别的字符,然后返回以那些字符作元素的一个数组。
注意:ToBase10 只在两个参数都正确的情况下返回正确的答案。
有疑问尽管问。
Function ToBase10(number As Variant, fromBase As Integer)
' Create mapping of hexadecimal to decimal.
Set map = CreateObject("Scripting.Dictionary")
keys = Split("0 1 2 3 4 5 6 7 8 9 A B C D E F")
For i = 0 To UBound(keys)
map.Add keys(i), i
Next
number = UCase(number)
For i = 1 To Len(number)
digit = map(Mid$(number, i, 1))
ToBase10 = ToBase10 + digit * fromBase ^ (Len(number) - i)
Next
End Function
'num 要转换的数字
'csale 进制 2 ,8,10,16
Function outNum(num,scale)
Dim Arr,tmp
Dim ii,jj,returnVal
Dim keyArr
returnVal=0
keyArr=Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F")
Num=UCase(Num)
For II=1 to Len(num)
tmp=Mid(num,len(num)-II+1,1)
For jj=0 to scale-1
If tmp=keyArr(jj) Then
tmp=jj
exit for
end if
Next
returnVal=returnVal+tmp*power(scale,ii-1)
Next
outNum=returnVal
End Function
Function power(num,p)
Dim k,rtVal
rtVal=1
for k=1 to p
rtVal=rtVal*num
next
power=rtVal
End Function