我只知道0x2A是一个1Byte的长度的内容,现在我需要知道他的每一个bit位的值,我怎么才能实现?
我想取出2,和A,单独转成bit位,可是怎么取出2,A呢?

解决方案 »

  1.   

    你所谓的0x2A是指以字符串显示的16进制数,还是说由其他设备,比如串口读进来的?如果前者的话,首先要将这个字符串转换为数字;如果是后者,因为本身就是数字,所以就是从10进制数(不是16进制)往2进制转了。
    将诸如0x2A这类的字符串转换为10进制的原型如下(没有在VB里调过):
    strSou为输入的0x2A这类的字符串
    dim strHex as string
    dim intHi as integer,intLow as integer
    dim intRet as integerstrHex="0123456789ABCDEF"intHi=instr(1,strHex,mid$(strSou,3,1))-1    
    intLow=instr(1,strHex,mid$(strSou,4,1))-1
    intRet=intHi*16+intLow
    instr函数的写法有些忘了,总之就是在strHex搜索2、A的位置,然后一乘一加就ok了。
    至于从10进制转2进制的程序很简单,用个循环不断去除2就完事了,我这里只提供一段程序原型来判断一个数2进制下的某一位是否为1,很简单的,比如要判断321123这个数的第6位是否为1只要这么作:
    if 321123 and (2^6) then
    ...
      

  2.   

    dim a as string,b as integer   a = "0xff"
       b = Val(Replace(a, "0x", "&h"))   (b and 1)<>0 第1个bit为1
       (b and 2)<>0  就是第2个bit为1
      (b and i^n)<>0 就是第n-1个bit 为1
     
      

  3.   

    我想应该算是字符串吧,是从winsock接收来的
    可是我要取2,A时,mid("0x2a",3,1)取的是2么? 0x2A前提是1byte长度,我就迷在怎么取2,A 
      

  4.   

    呵呵,是Bit值啊!试试:
    Msgbox GetByte(5,1)'取出数字5的第一个字节的值!
    Private Function GetByte(ByVal btS As Byte, ByVal btPos As Byte) As Byte
        Select Case btPos
                Case 1
                    If (btS And &H1) = &H1 Then
                        GetByte = 1
                    Else
                        GetByte = 0
                    End If
                Case 2
                    If (btS And &H2) = &H2 Then
                        GetByte = 1
                    Else
                        GetByte = 0
                    End If
                Case 3
                    If (btS And &H4) = &H4 Then
                        GetByte = 1
                    Else
                        GetByte = 0
                    End If
                Case 4
                    If (btS And &H8) = &H8 Then
                        GetByte = 1
                    Else
                        GetByte = 0
                    End If
                Case 5
                    If (btS And &H10) = &H10 Then
                        GetByte = 1
                    Else
                        GetByte = 0
                    End If
                Case 6
                    If (btS And &H20) = &H20 Then
                        GetByte = 1
                    Else
                        GetByte = 0
                    End If
                Case 7
                    If (btS And &H40) = &H40 Then
                        GetByte = 1
                    Else
                        GetByte = 0
                    End If
                Case 8
                    If (btS And &H80) = &H80 Then
                        GetByte = 1
                    Else
                        GetByte = 0
                    End If
        End Select
    End Function
      

  5.   

    上面这位兄弟,优化一下你的代码吧,有必要用Select case嘛?要是需要去判断4 byte的怎么办?
    如果是从winsock来的,我想应该是数值,而不是字符串,至于与你进行通信的另一端所说的“我传给你一个0x2A,你怎么怎么样”诸如此类的话,我想他的意思是发给你一个byte的信息,即16进制的2A(42),而不是4个byte:“0”、“x”、“2”、“A”。