用VB,编写程序,实现2,10,16进制的转换,不要太简单的那种

2025-02-26 06:02:11
推荐回答(3个)
回答1:

'直接调用以下函数过程即可
'二进制转十进制
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:

整数转换的话可以这样:

'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

回答3:

写多复杂?我可以