
将N进制转换成十进制的VB通用程序
需要一个回答者自己编写的有效程,请不要复制网页上已有的,那些我都看了,都不行程序请写完整急……很急...
需要一个回答者自己编写的有效程,请不要复制网页上已有的,那些我都看了,都不行
程序请写完整 急……很急 展开
程序请写完整 急……很急 展开
5个回答
展开全部
Private Sub Command1_Click()
Print Convert(Hex(1234567), 16) '测试函数,显示结果应该是1234567
End Sub
Private Function Convert(ByVal S As String, ByVal N As Integer) As Double '任意进制转换成10进制
Dim L As String
Dim R() As String
Dim i As Integer
Dim j As Integer
L = "0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z" '进制字符串字典
R = Split(L, "|")
For i = 1 To Len(S)
For j = 0 To UBound(R)
If UCase(Mid(S, i, 1)) = R(j) Then
Convert = Convert * N + j
End If
Next j
Next i
End Function
Print Convert(Hex(1234567), 16) '测试函数,显示结果应该是1234567
End Sub
Private Function Convert(ByVal S As String, ByVal N As Integer) As Double '任意进制转换成10进制
Dim L As String
Dim R() As String
Dim i As Integer
Dim j As Integer
L = "0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z" '进制字符串字典
R = Split(L, "|")
For i = 1 To Len(S)
For j = 0 To UBound(R)
If UCase(Mid(S, i, 1)) = R(j) Then
Convert = Convert * N + j
End If
Next j
Next i
End Function
展开全部
Private Sub Command1_Click() '程序实例,将1080转换为11进制再转换回来
Print anyNumber(1080, 11)
Print anyDec(anyNumber(1080, 11), 11)
End Sub
'十进制转任意进制(最低2进制,最高36进制,由于字符限制,只能达到36进制,其实可以达到N进制)
Private Function anyNumber(Number, Optional Num = 2) As String 'number为十进制数字,num为进制,默认为二进制
If Num < 2 Or Num > 36 Then
anyNumber = "最低2进制,最高36进制"
Exit Function
End If
If Not IsNumeric(Number) Then Number = Val(Number)
Dim a As String
anyNumber = ""
Do While Number > 0
a = CStr(Number Mod Num)
Select Case a
Case "10": a = "A"
Case "11": a = "B"
Case "12": a = "C"
Case "13": a = "D"
Case "14": a = "E"
Case "15": a = "F"
Case "16": a = "G"
Case "17": a = "H"
Case "18": a = "I"
Case "19": a = "J"
Case "20": a = "K"
Case "21": a = "L"
Case "22": a = "M"
Case "23": a = "N"
Case "24": a = "o" '由于大写o与0一样,所以将字母o与0区分
Case "25": a = "P"
Case "26": a = "Q"
Case "27": a = "R"
Case "28": a = "S"
Case "29": a = "T"
Case "30": a = "U"
Case "31": a = "V"
Case "32": a = "W"
Case "33": a = "X"
Case "34": a = "Y"
Case "35": a = "Z"
End Select
anyNumber = a & anyNumber
Number = Number \ Num
Loop
End Function
'任意进制转十进制(最低2进制,最高36进制)
Private Function anyDec(Number, Optional Num = 2) As String
If Num < 2 Or Num > 36 Then
anyDec = "最低2进制,最高36进制"
Exit Function
End If
Dim a As String
Dim d As Double
For i = 1 To Len(Number)
a = UCase(Mid(Number, Len(Number) - i + 1, 1))
Select Case a
Case "A": a = "10"
Case "B": a = "11"
Case "C": a = "12"
Case "D": a = "13"
Case "E": a = "14"
Case "F": a = "15"
Case "G": a = "16"
Case "H": a = "17"
Case "I": a = "18"
Case "J": a = "19"
Case "K": a = "20"
Case "L": a = "21"
Case "M": a = "22"
Case "N": a = "23"
Case "O": a = "24"
Case "P": a = "25"
Case "Q": a = "26"
Case "R": a = "27"
Case "S": a = "28"
Case "T": a = "29"
Case "U": a = "30"
Case "V": a = "31"
Case "W": a = "32"
Case "X": a = "33"
Case "Y": a = "34"
Case "Z": a = "35"
End Select
d = d + Num ^ (i - 1) * Val(a)
Next
anyDec = CStr(d)
End Function
Print anyNumber(1080, 11)
Print anyDec(anyNumber(1080, 11), 11)
End Sub
'十进制转任意进制(最低2进制,最高36进制,由于字符限制,只能达到36进制,其实可以达到N进制)
Private Function anyNumber(Number, Optional Num = 2) As String 'number为十进制数字,num为进制,默认为二进制
If Num < 2 Or Num > 36 Then
anyNumber = "最低2进制,最高36进制"
Exit Function
End If
If Not IsNumeric(Number) Then Number = Val(Number)
Dim a As String
anyNumber = ""
Do While Number > 0
a = CStr(Number Mod Num)
Select Case a
Case "10": a = "A"
Case "11": a = "B"
Case "12": a = "C"
Case "13": a = "D"
Case "14": a = "E"
Case "15": a = "F"
Case "16": a = "G"
Case "17": a = "H"
Case "18": a = "I"
Case "19": a = "J"
Case "20": a = "K"
Case "21": a = "L"
Case "22": a = "M"
Case "23": a = "N"
Case "24": a = "o" '由于大写o与0一样,所以将字母o与0区分
Case "25": a = "P"
Case "26": a = "Q"
Case "27": a = "R"
Case "28": a = "S"
Case "29": a = "T"
Case "30": a = "U"
Case "31": a = "V"
Case "32": a = "W"
Case "33": a = "X"
Case "34": a = "Y"
Case "35": a = "Z"
End Select
anyNumber = a & anyNumber
Number = Number \ Num
Loop
End Function
'任意进制转十进制(最低2进制,最高36进制)
Private Function anyDec(Number, Optional Num = 2) As String
If Num < 2 Or Num > 36 Then
anyDec = "最低2进制,最高36进制"
Exit Function
End If
Dim a As String
Dim d As Double
For i = 1 To Len(Number)
a = UCase(Mid(Number, Len(Number) - i + 1, 1))
Select Case a
Case "A": a = "10"
Case "B": a = "11"
Case "C": a = "12"
Case "D": a = "13"
Case "E": a = "14"
Case "F": a = "15"
Case "G": a = "16"
Case "H": a = "17"
Case "I": a = "18"
Case "J": a = "19"
Case "K": a = "20"
Case "L": a = "21"
Case "M": a = "22"
Case "N": a = "23"
Case "O": a = "24"
Case "P": a = "25"
Case "Q": a = "26"
Case "R": a = "27"
Case "S": a = "28"
Case "T": a = "29"
Case "U": a = "30"
Case "V": a = "31"
Case "W": a = "32"
Case "X": a = "33"
Case "Y": a = "34"
Case "Z": a = "35"
End Select
d = d + Num ^ (i - 1) * Val(a)
Next
anyDec = CStr(d)
End Function
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Private Sub Command1_Click()
Text1.Text = nto10(16, Text1.Text)
End Sub
Function nto10(n As Integer, num As String) As Long
'n是几进制,num要转换的字串因为10进制以上的含有字母了所以用字串。
num = UCase(num)
Dim numA() As Integer
ReDim numA(Len(num) - 1)
If n > 36 Then
MsgBox "36进制以上的不能转换!"
Exit Function
End If
L = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z" '进制字符串字典
R = Split(L, ",")
For m = 1 To Len(num)
tmp = Mid(num, m, 1)
Select Case tmp
Case IsNumeric(tmp)
numA(UBound(numA) - m + 1) = tmp
Case Else
For j = 10 To UBound(R)
If tmp = R(j) Then
numA(UBound(numA) - m + 1) = j
End If
Next
End Select
Next
For m = 0 To UBound(numA)
nto10 = nto10 + numA(m) * n ^ m
Next
End Function
Text1.Text = nto10(16, Text1.Text)
End Sub
Function nto10(n As Integer, num As String) As Long
'n是几进制,num要转换的字串因为10进制以上的含有字母了所以用字串。
num = UCase(num)
Dim numA() As Integer
ReDim numA(Len(num) - 1)
If n > 36 Then
MsgBox "36进制以上的不能转换!"
Exit Function
End If
L = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z" '进制字符串字典
R = Split(L, ",")
For m = 1 To Len(num)
tmp = Mid(num, m, 1)
Select Case tmp
Case IsNumeric(tmp)
numA(UBound(numA) - m + 1) = tmp
Case Else
For j = 10 To UBound(R)
If tmp = R(j) Then
numA(UBound(numA) - m + 1) = j
End If
Next
End Select
Next
For m = 0 To UBound(numA)
nto10 = nto10 + numA(m) * n ^ m
Next
End Function
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Private Sub Command1_Click()
b = Text2
On Error GoTo XXXX
a = Split(Str(Text1), ".")
For i = 1 To Len(a(0)) - 1
c1 = Mid(a(0), Len(a(0)) + 1 - i, 1)
sum1 = sum1 + c1 * b ^ (i - 1)
Next
For i = 1 To Len(a(1))
c2 = Mid(a(1), Len(a(1)) + 1 - i, 1)
sum2 = sum2 + c2 * b ^ (-i)
Next
Sum = sum1 + sum2
Text3 = Sum
If Mid(a(0), 1, 1) = "-" Then Text3 = -1 * Sum
Exit Sub
XXXX:
a = Str(Text1)
For i = 1 To Len(a) - 1
c1 = Mid(a, Len(a) + 1 - i, 1)
Sum = sum1 + c * b ^ (i - 1)
Next
Text3 = Sum
If Mid(a, 1, 1) = "-" Then Text3 = -1 * Sum
End Sub
b = Text2
On Error GoTo XXXX
a = Split(Str(Text1), ".")
For i = 1 To Len(a(0)) - 1
c1 = Mid(a(0), Len(a(0)) + 1 - i, 1)
sum1 = sum1 + c1 * b ^ (i - 1)
Next
For i = 1 To Len(a(1))
c2 = Mid(a(1), Len(a(1)) + 1 - i, 1)
sum2 = sum2 + c2 * b ^ (-i)
Next
Sum = sum1 + sum2
Text3 = Sum
If Mid(a(0), 1, 1) = "-" Then Text3 = -1 * Sum
Exit Sub
XXXX:
a = Str(Text1)
For i = 1 To Len(a) - 1
c1 = Mid(a, Len(a) + 1 - i, 1)
Sum = sum1 + c * b ^ (i - 1)
Next
Text3 = Sum
If Mid(a, 1, 1) = "-" Then Text3 = -1 * Sum
End Sub
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
x=Text1.text
i=1
Do while i<=lenX
s=Val(x.i.1)*R^(Len(x)-
i)+s
i=i+1
Loop
i=1
Do while i<=lenX
s=Val(x.i.1)*R^(Len(x)-
i)+s
i=i+1
Loop
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询