比如,设备接收到一个Byte,其中的8个bit分别表示不同的信息。我如何才能把其中的某一个(或任何一个)bit读取出来呢???
请多多指教,不胜感激!

解决方案 »

  1.   

    首先你把byte变成二进制01的格式,把他作为一个字符串,你把每一位取出来就是了我就是这么做的你是做开关量 嘛??
      

  2.   


    是网络设备那边传过来的信息,每一个Byte中表示不同的状态。
    我想读取其中的某个bit,根据他的0或1来判断设备的状态,以作相应的修改。
    是不是先要把收到的Byte 转换成8位的01串,然后再分别读取呢?
    具体该怎么做呢?
    有劳了!
      

  3.   

    AND 操作(与操作)
    一个8位的BIT,用一个Integer型就OK了。其他8位不会超过255的。如传入一个数:(11011011) 2=219
    要判断左第一位是否为1,就与2^0进行AND操作,就是1  即  219 and (2^0)=1 如果and的结果不为0,就表示该位为1,否则为0如,现在在判断左第5位,就用: 219 and (2^(5-1))=16   表示第5位为1
    判断左第六位:219 and (2^(6-1))=0  表示第6位为0就这样判断啦。
      

  4.   

    你的每一个byte传过来的是不是10进制??如果是就用10进制转2进制的函数strMod(i) = TenturnTwo(CInt(bytGet(i)))   '转换后放入字符串'------------------------------------------------------------
    ' **            10进制转换成2进制
    '------------------------------------------------------------
    Private Function TenturnTwo(ByVal varNum As Long)
        Dim returnString As String, ModNum As Integer
        Do While varNum > 0
            ModNum = varNum Mod 2
            varNum = varNum \ 2
            returnString = Trim(Str(ModNum)) + returnString
        Loop
            TenturnTwo = returnString
    End Function
      

  5.   


    Private Sub Form_Load()
        Debug.Print GetBit(219, 1)
        Debug.Print GetBit(219, 5)
        Debug.Print GetBit(219, 6)
    End Sub'**********************************************************************
    '**函数名称:GetBit
    '**参数说明:vBit(Integer):
    '**    :vPos(Integer):
    '**返回参数:Integer:0:1两种值。
    '**功能描述:判断vBit数据的vPos位的数值
    '**调用变量:vBit 要判断的数据,vPos位数,从左面开始。
    '**全局变量:
    '**作  者:Machan
    '**日  期:2004年09月13
    '**修 改 人:
    '**日  期:
    '**版  本:1.0
    '**********************************************************************
    Public Function GetBit(vBit As Integer, vPos As Integer) As Integer
        Dim Retval As Integer
        
        Retval = vBit And (2 ^ (vPos - 1))
        If Retval = 0 Then
            GetBit = 0
        Else
            GetBit = 1
        End If
            
    End Function