'直接调用以下函数过程即可
'二进制转十进制
Public Function B2D(vBStr As String) As Long
Dim vLen As Integer '串长
Dim vDec As Long '结果
Dim vG As Long '权值
Dim vI As Long '位数
Dim vTmp As String '临时串
Dim vN As Long '中间值
vLen = Len(vBStr)
vG = 1 '初始权值
vDec = 0 '结果初值
B2D = vDec '返回初值
For vI = vLen To 1 Step -1
vTmp = Mid(vBStr, vI, 1) '取出当前位
vN = Val(vTmp)
If vN < 2 Then '判断是不是合法二进制串,貌似不严谨,E文和符号会被判0而合法
vDec = vDec + vG * vN '得到中间结果
vG = vG + vG
Else
vDec = 0
'msgbox "不是有效的二进制数",vbokonly
Exit Function
End If
Next vI
B2D = vDec
End Function
'十进制转二进制
Public Function D2B(Dec As Long) As String
D2B = ""
Do While Dec > 0
D2B = Dec Mod 2 & D2B
Dec = Dec \ 2
Loop
End Function
' 用途:将十六进制转化为二进制
' 输入:Hex(十六进制数)
' 输入数据类型:String
' 输出:H2B(二进制数)
' 输出数据类型:String
' 输入的最大数为2147483647个字符
Public Function H2B(ByVal Hex As String) As String
Dim i As Long
Dim b As String
Hex = UCase(Hex)
For i = 1 To Len(Hex)
Select Case Mid(Hex, i, 1)
Case "0": b = b & "0000"
Case "1": b = b & "0001"
Case "2": b = b & "0010"
Case "3": b = b & "0011"
Case "4": b = b & "0100"
Case "5": b = b & "0101"
Case "6": b = b & "0110"
Case "7": b = b & "0111"
Case "8": b = b & "1000"
Case "9": b = b & "1001"
Case "A": b = b & "1010"
Case "B": b = b & "1011"
Case "C": b = b & "1100"
Case "D": b = b & "1101"
Case "E": b = b & "1110"
Case "F": b = b & "1111"
End Select
Next i
While Left(b, 1) = "0"
b = Right(b, Len(b) - 1)
Wend
H2B = b
End Function
' 用途:将二进制转化为十六进制
' 输入:Bin(二进制数)
' 输入数据类型:String
' 输出:B2H(十六进制数)
' 输出数据类型:String
' 输入的最大数为2147483647个字符
Public Function B2H(ByVal Bin As String) As String
Dim i As Long
Dim H As String
If Len(Bin) Mod 4 <> 0 Then
Bin = String(4 - Len(Bin) Mod 4, "0") & Bin
End If
For i = 1 To Len(Bin) Step 4
Select Case Mid(Bin, i, 4)
Case "0000": H = H & "0"
Case "0001": H = H & "1"
Case "0010": H = H & "2"
Case "0011": H = H & "3"
Case "0100": H = H & "4"
Case "0101": H = H & "5"
Case "0110": H = H & "6"
Case "0111": H = H & "7"
Case "1000": H = H & "8"
Case "1001": H = H & "9"
Case "1010": H = H & "A"
Case "1011": H = H & "B"
Case "1100": H = H & "C"
Case "1101": H = H & "D"
Case "1110": H = H & "E"
Case "1111": H = H & "F"
End Select
Next i
While Left(H, 1) = "0"
H = Right(H, Len(H) - 1)
Wend
B2H = H
End Function
' 用途:将十六进制转化为十进制
' 输入:Hex(十六进制数)
' 输入数据类型:String
' 输出:H2D(十进制数)
' 输出数据类型:Long
' 输入的最大数为7FFFFFFF,输出的最大数为2147483647
Public Function H2D(ByVal Hex As String) As Long
Dim i As Long
Dim b As Long
Hex = UCase(Hex)
For i = 1 To Len(Hex)
Select Case Mid(Hex, Len(Hex) - i + 1, 1)
Case "0": b = b + 16 ^ (i - 1) * 0
Case "1": b = b + 16 ^ (i - 1) * 1
Case "2": b = b + 16 ^ (i - 1) * 2
Case "3": b = b + 16 ^ (i - 1) * 3
Case "4": b = b + 16 ^ (i - 1) * 4
Case "5": b = b + 16 ^ (i - 1) * 5
Case "6": b = b + 16 ^ (i - 1) * 6
Case "7": b = b + 16 ^ (i - 1) * 7
Case "8": b = b + 16 ^ (i - 1) * 8
Case "9": b = b + 16 ^ (i - 1) * 9
Case "A": b = b + 16 ^ (i - 1) * 10
Case "B": b = b + 16 ^ (i - 1) * 11
Case "C": b = b + 16 ^ (i - 1) * 12
Case "D": b = b + 16 ^ (i - 1) * 13
Case "E": b = b + 16 ^ (i - 1) * 14
Case "F": b = b + 16 ^ (i - 1) * 15
End Select
Next i
H2D = b
End Function
' 用途:将十进制转化为十六进制
' 输入:Dec(十进制数)
' 输入数据类型:Long
' 输出:D2H(十六进制数)
' 输出数据类型:String
' 输入的最大数为2147483647,输出最大数为7FFFFFFF
Public Function D2H(Dec As Long) As String
Dim a As String
D2H = ""
Do While Dec > 0
a = CStr(Dec Mod 16)
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"
End Select
D2H = a & D2H
Dec = Dec \ 16
Loop
End Function
整数转换的话可以这样:
'2进制到10进制
Public Function B2D(B As String) As Long
Dim Index As Integer
For Index = 1 To Len(B)
B2D = B2D * 2 + Val(Mid(B, Index, 1))
Next
End Function
'2进制到16进制
Public Function B2H(B As String) As String
B = String((4 - Len(B) Mod 4) Mod 4, "0") & B
Dim Index As Integer
For Index = 1 To Len(B) Step 4
B2H = B2H + Mid("FEC80124936DA5B7", InStr("1111000010011010111", Mid(B, Index, 4)), 1)
Next
End Function
'10进制到2进制
Public Function D2B(ByVal D As Long) As String
Do While D > 0
D2B = (D Mod 2) & D2B
D = (D - D Mod 2) / 2
Loop
End Function
'10进制到16进制
Public Function D2H(ByVal D As Long) As String
Do While D > 0
D2H = Mid("0123456789ABCDEF", (D Mod 16) + 1, 1) & D2H
D = (D - D Mod 16) / 16
Loop
End Function
'16进制到2进制
Public Function H2B(H As String) As String
Dim Index As Integer
For Index = 1 To Len(H)
H2B = H2B & Mid("1111000010011010111", InStr("FEC80124936DA5B7", Mid(H, Index, 1)), 4)
Next
Do While Left(H2B, 1) = "0" And Len(H2B) > 0
H2B = Mid(H2B, 2)
Loop
End Function
'16进制到10进制
Public Function H2D(H As String) As Long
Dim Index As Integer
For Index = 1 To Len(H)
H2D = H2D * 16 + Val("&H" & Mid(H, Index, 1))
Next
End Function
写多复杂?我可以