我还在学习python语言,我的任务是我不熟悉的东西。我要做的是创建一个代码或库,能够从寄存器中读取二进制或十六进制的错误整数,并从该信号中显示在tkinter gui上发生的错误。例如,位1是过温,位2是过流,.....位11是油箱过流。因此,如果出现0000000000001011这样的信号,它将显示在程序运行时发生了3个错误。
我看到的唯一可能的方法是创建一个大的if/elif语句,其中比较从0x0001到0xffff的每个单个位组合。有没有人知道可用的python库或可以使用的简单掩码/代码,以便我不必担心创建从0x0001到0xffff的每一个可能的组合。
或者,如果可能的话,是否有一种方法使整数在代码中运行,比较每个数字并确定是否有1。如果有一个,那么它将显示与单个位相关联的错误消息。
谢谢你的帮助
有很多方法可以做到。您不必测试每个位组合,只需测试每个单独的位(在0000-ffff情况下为16位)。以下是一些用4位表示的方法:
- 使用内置的
enum.Flag
类型。下面创建一个Error
类,并用一些名称定义每个位。创建一个带有错误值的类实例,并打印它,将显示该值中的标志。测试一个特定的标志,使用该标志进行位对齐。注意,auto
自动生成位值,而不是分配1、2、4、8等。直接。
from enum import Flag,auto
class Error(Flag):
NotFound = auto() # bit 0, value 1
BadValue = auto() # bit 1, value 2
ReadOnly = auto() # bit 2, value 4
Error = auto() # bit 3, value 8, etc.
f = Error(0b1101)
print(f)
for bit in Error:
if f & bit:
print(f'bit value {bit.value}: {bit.name}')
输出:
Error.Error|ReadOnly|NotFound
bit value 1: NotFound
bit value 4: ReadOnly
bit value 8: Error
- 手动测试位。
1 << n
在第n个位置创建一个位。如果错误值 中设置了该位,则错误消息的值将是非零的。
err = 0b1101
bit_desc = 'not found','bad value','read only','error'
for bit in range(4):
if err & (1 << bit):
print(bit_desc[bit])
输出:
not found
read only
error