按位AND和字符串变量

时间:2016-04-16 03:57:14

标签: python

我从处理器中提取字节宽数据,并试图提取一位/标志状态。我从0x1B拉出数据字节,然后屏蔽0x08,这应该离开第4位。在正常操作中,该位需要一些时间才能翻转 - 所以我重复拉动该位并对其进行测试

STATUS_FOC = []
STATUS = []
FOC_Mask = []
while x <= 100:
     STATUS = bin(sys.Read(0x1B))
     print 'status', STATUS
     FOC_Mask = bin(0x08)
     print 'FOC', FOC_Mask

     STATUS_FOC = STATUS & FOC_Mask

无论我对变量做什么,Python都坚持在最后一行,我试图做两个字符串的逻辑AND。 STATUS和FOC_Mask的输出如下:

状态0b11010000 FOC 0b1000

我读作二进制文件,然而程序在最后一行崩溃,说它不能做'&amp;'对字符串的操作。帮助

2 个答案:

答案 0 :(得分:2)

bin()函数返回一个字符串。你的代码中不需要它。只需:

STATUS_FOC = []
STATUS = []
FOC_Mask = []
# x = 0
while x <= 100:
     STATUS = sys.Read(0x1B)
     print 'status', STATUS
     FOC_Mask = 0x08
     print 'FOC', FOC_Mask
     STATUS_FOC = STATUS & FOC_Mask
     # x += 1

这应该可行,我无法使用您的系统进行测试。我还添加了一个增加x的提示,否则Python会在while条件下给你一个错误,或者如果x在别处定义,你的循环将永远持续,除非你想要的。

答案 1 :(得分:0)

bin正在给你一个二进制数的刺激表示。为了使用&按位运算符,两个值都是ints

In [10]: status = bin(0x1B)

In [11]: print 'status', status
status 0b11011

In [12]: mask = bin(0x08)

In [13]: print 'foc ', mask
foc  0b1000

In [14]: status_foc = int(status, 2) & int(mask, 2)

In [15]: print 'status_foc', status_foc
status_foc 8

In [16]: status_foc = bin(status_foc)

In [17]: print 'status_foc', status_foc
status_foc 0b1000

int('string', 2)中的第二个参数使其成为基数2或二进制。