我正在从处理器中提取字节宽的数据,并尝试提取一个位/标志来表示状态。我从0x1B中提取数据字节,然后对应该离开第4位的0x08进行掩码。在正常操作中,位翻转需要一些时间-所以我反复拉出位并测试它
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
我把它读成二进制文件,但是程序在最后一行崩溃了,说它不能对字符串进行'&‘操作。帮助
发布于 2016-04-16 12:11:52
函数的作用是:返回一个字符串。您不需要在代码中使用它。只需执行以下操作:
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,那么您的循环将永远持续下去,除非这是您想要的。
发布于 2016-04-16 12:17:03
bin为您提供了一个二进制数的sting表示。为了使用&位运算符,这两个值都是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 0b1000int('string', 2)中的第二个参数使其以2为基数,即二进制。
https://stackoverflow.com/questions/36659938
复制相似问题