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