极品家丁31集百度云盘:编一个程序使输入二.八.十六进制数输出十进制数

来源:百度文库 编辑:高校问答 时间:2024/05/09 04:03:29
不考虑小数,用VB编程.

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