str = Val("&H" + stri)!!!!!!??????

解决方案 »

  1.   

    public function hb(byref stri as string)
    dim s as integer
    dim ret as string
    dim str as integer
    str=val("&H" & stri)
    do while str>0
       s= str mod 2
       str=str\2
       ret=s & ret
    loop
    stri=ret
    end function
      

  2.   

    Option ExplicitPrivate Function cBit(ByVal Number As Long) As String
        Dim N1 As Long, N2 As Long
        Dim I As Integer
        cBit = ""
        N1 = Number
        I = 0
        N2 = 2 ^ I
        While N2 <= N1
            If N1 And N2 Then
                cBit = "1" & cBit
            Else
                cBit = "0" & cBit
            End If
            I = I + 1
            N2 = 2 ^ I
        Wend
    End FunctionPrivate Sub Command1_Click()
        MsgBox cBit(&HE2)
        MsgBox cBit(&HAD)
    End Sub
      

  3.   

    Option ExplicitPrivate Function cBit(ByVal Number As Long) As String
        Dim N1 As Long, N2 As Long
        Dim I As Integer
        cBit = ""
        N1 = Number
        I = 0
        N2 = 2 ^ I
        While N2 <= N1
            If N1 And N2 Then
                cBit = "1" & cBit
            Else
                cBit = "0" & cBit
            End If
            I = I + 1
            N2 = 2 ^ I
        Wend
    End FunctionPrivate Sub Command1_Click()
        MsgBox cBit(&HE2)
        MsgBox cBit(&HAD)
    End Sub
      

  4.   

    dim Mask as Variant
    Mask=array("0000","0001","0002",...,"1111") '16个
    for i=1 to len(str)
        binStr =binStr+Mask(Asc(mid(str,i,1)-Asc("A"))
    next i
    搞定(我没调试啊,可能有错误)
      

  5.   

    同意zhangyan_qd(doggyzone)去看看书,为什么会有十六进制吧。
      

  6.   

    呵呵
    太麻烦了
    直接用位(Bit)比较一下就出来了。
    看来阁下的计算机基础不行,是不是半路出家的  :)
      

  7.   

    to zhangyan_qd(doggyzone) :
    人家是输入16禁止的字符串
      

  8.   

    同意zhangyan_qd(doggyzone)
    我刚学编程时也来过这一手(不好意思),不过现在可不干了。
      

  9.   

    进制转化相关贴子:
    http://www.csdn.net/expert/topic/702/702004.xml?temp=.5143549
    http://www.csdn.net/expert/topic/670/670623.xml?temp=.1453516
    http://www.csdn.net/expert/topic/669/669329.xml?temp=.7846186
    http://www.csdn.net/expert/topic/668/668288.xml?temp=.5115167
    http://www.csdn.net/expert/topic/661/661706.xml?temp=.4214899
    http://www.csdn.net/expert/topic/658/658476.xml?temp=.3378717
    http://www.csdn.net/expert/topic/657/657002.xml?temp=.3998529
    http://www.csdn.net/expert/topic/635/635224.xml?temp=.7371942
    http://www.csdn.net/expert/topic/631/631897.xml?temp=6.342715E-02
      

  10.   

    Function Hex2Bin(ByVal strHex As String) As String
    Dim lngIn As Long
    Dim strOut As String
    Dim i As Long
    lngIn = CInt("&H" & strHex)
    For i = 0 To Int(Log(lngIn) / Log(2))
        If (lngIn And 2 ^ i) = 2 ^ i Then
            strOut = "1" & strOut
        Else
            strOut = "0" & strOut
        End If
    NextHex2Bin = strOut
    End Function
      

  11.   

    昨天贴的程序有误,后来又莫名其妙被删掉了。楼主和我讨论:输入大于16的十六进制怎么办。OK,看看这次的程序是不是正确。
    Public Function hb(ByRef stri As String)
    dim MASK as Variant
    MASK=array("0000","0001","0010"....."1111") '一共16个
    for i=1 to len(stri)
        ch = mid(stri,i,1)
        in = asc(ch)
        if in>asc("9") then    '偷懒,这里不作语法检查了,而且9的ASCII码也忘了,还假设所有的ABCDE都是大写,如果包括小写就再转一次
            in=in-asc("A")
        else
            in=in-asc("0")
        end if
        hb= hb & MASK(in)
    next i
    end function
    忘记谁说的了,所有算法里最快的就是查表
    昨天的帖子说话不太客气,这里一并道歉。
      

  12.   

    又错了,中间那一行应该是
    in = in -asc("A")+10
    反正就是看个意思,大家不会太介意吧?
    有好多问题可以优化,比如一开始那个Array,我的意思是设一个常量数组,不过VB没有什么好方法(以前READ/DATA的好传统都丢了)。这里也没有语法检查、没有边界检查,不算一个好程序。只是演示一个想法(连算法也谈不上),大家研究研究,何必当真呢:)