我从处理器中提取字节宽数据,并试图提取一位/标志状态。我从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;'对字符串的操作。帮助
答案 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或二进制。