创建一个掩码或代码,以简化读取16位错误解析.Python



我还在学习python语言,我的任务是我不熟悉的东西。我要做的是创建一个代码或库,能够从寄存器中读取二进制或十六进制的错误整数,并从该信号中显示在tkinter gui上发生的错误。例如,位1是过温,位2是过流,.....位11是油箱过流。因此,如果出现0000000000001011这样的信号,它将显示在程序运行时发生了3个错误。

我看到的唯一可能的方法是创建一个大的if/elif语句,其中比较从0x0001到0xffff的每个单个位组合。有没有人知道可用的python库或可以使用的简单掩码/代码,以便我不必担心创建从0x0001到0xffff的每一个可能的组合。

或者,如果可能的话,是否有一种方法使整数在代码中运行,比较每个数字并确定是否有1。如果有一个,那么它将显示与单个位相关联的错误消息。

谢谢你的帮助

有很多方法可以做到。您不必测试每个位组合,只需测试每个单独的位(在0000-ffff情况下为16位)。以下是一些用4位表示的方法:

  1. 使用内置的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. 手动测试位。1 << n在第n个位置创建一个位。如果错误值
  2. 中设置了该位,则错误消息的值将是非零的。
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

最新更新