比如两个数11000和01100,取或后得到11100,有直接的函数可以实现吗?

解决方案 »

  1.   

    Private Function BIN2DEC(ByVal varString As String)
        Dim SLen As Long, I As Long, returnNum As Long
        SLen = Len(varString)
        For I = 0 To SLen - 1
            returnNum = returnNum + Val(Mid(varString, I + 1, 1)) * (2 ^ (SLen - I - 1))
        Next
        BIN2DEC = returnNum
    End FunctionDebug.Print BIN2DEC("11000") Or BIN2DEC("01100")
      

  2.   

    '可以用分开按位运算的办法Private Function BinOR(ByVal var1 As String, var2 As String) As String
      Dim i&
       For i = 1 To IIf(Len(var1) > Len(var2), Len(var1), Len(var2))
           BinOR = BinOR & IIf(i > Len(var1), 0, Mid(var1, i, 1)) Or IIf(i > Len(var2), 0, Mid(var2, i, 1))
       Next
    End FunctionDebug.Print BinOR("11000", "01100")
      

  3.   

    都是把二进制绕到十进制,再绕回来处理VB调用汇编语言
    Public Function Dec2Bin(ByVal Dec As Byte) As Byte()
    On Error Resume Next
     Dim Asm(7) As Long
     Dim Output(7) As Byte
     Asm(0) = &H5A59585E
     Asm(1) = &H8A36565B
     Asm(2) = &H8AF63300
     Asm(3) = &H7EAC0D0
     Asm(4) = &H8836E0D0
     Asm(5) = &H83463114
     Asm(6) = &HEF7508FE
     Asm(7) = &H909090C3
     CallWindowProc VarPtr(Asm(0)), VarPtr(Dec), VarPtr(Output(0)), 0, 0
     Dec2Bin = Output
    End Function
      

  4.   

    楼上的汇编代码很巧妙, 但并没有按照ms的要求保存ebx esi edi的值。
    虽然callwindowsproc的内部实现并没有用到这个值, 但以后版本的windows不能保证不出问题.
      

  5.   

    修改如下Public Function Dec2Bin(ByVal Dec As Byte) As Byte()
    On Error Resume Next
     Dim Asm(9) As Long
     Dim Output(7) As Byte
     Asm(0) = &H56EC8B55
     Asm(1) = &H8B08458B
     Asm(2) = &H8A360C4D
     Asm(3) = &H8AF63300
     Asm(4) = &H7EAC0D0
     Asm(5) = &H8836E0D0
     Asm(6) = &H83463114
     Asm(7) = &HEF7508FE
     Asm(8) = &H5DE58B5E
     Asm(9) = &H900010C2
     CallWindowProc VarPtr(Asm(0)), VarPtr(Dec), VarPtr(Output(0)), 0, 0
     Dec2Bin = Output
    End Function