' 用途:将二进制转化为十六进制
' 输入:Bin(二进制数)
' 输入数据类型:String
' 输出:BIN_to_HEX(十六进制数)
' 输出数据类型:String
' 输入的最大数为2147483647个字符
Public Function BIN_to_HEX(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
    BIN_to_HEX = H
END Function'我的问题是传入00000000(8个0)进来计算。结果为空。
'请问是什么问题呢??或者VB中二进制转十六进制有更好的办法吗?

解决方案 »

  1.   

    建议你跟踪下,好像str()出来的东西,,是数字变字符串的时候好像在最前面加了个空格。。  看看是不是这个原因  查下你CASE 出的是什么值
      

  2.   

    While Left(H, 1) = "0"
            H = Right(H, Len(H) - 1)
        Wend
    把这句删掉就OK了
      

  3.   

    最好加一个case else,以防止不合法的数据
      

  4.   

    我的问题是传入00000000(8个0)进来计算。结果为空。
    '请问是什么问题呢??     H是00的缘故While Left(H, 1) = "0"
            H = Right(H, Len(H) - 1)
    Wend返回就是""为了防止""出现,你在最后增加一个While Left(H, 1) = "0"
            H = Right(H, Len(H) - 1)
    Wend
    IF H ="" THEN H ="0"