在python中从整数位字段中提取任意位长度的整数

2024-09-30 01:21:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个来自硬件设备的整数,其中有几个值作为任意长度的位字段嵌入其中

例如,我有一个“status”值,它是一个16位整数,里面有几个值。一个是从第三位开始的4位整数

我正在使用我编写的函数提取它:

def vnGetFieldFromStatus(status):
    return ((status & 0b0001111000000000)>> 9)

我相信,这是很好的工作

是否有一种广义的python方法来获取由i字节组成的int,从字节j开始


Tags: 方法函数return字节硬件defstatus整数
1条回答
网友
1楼 · 发布于 2024-09-30 01:21:01

我制定了几个函数来帮助我:


# pulls an arbitrary number of bits out of a 16 bit field and returns an int with the values
def extractIntFrom16BitField(bitfield, startbit, nbits):
    if startbit<0:
        startbit=15+startbit
    if (startbit+nbits)>16:
        return 0
    rightPad=16-(startbit+nbits)
    if rightPad<0:
        return 0
    mask = ((pow(2,nbits)-1)<<rightPad)
    return((bitfield & mask) >> rightPad)

# Returns a list of ints, each extracted according to the input list of field lengths
# e.g. extractAllFieldsFrom16BitField(0b1010101000001100,[2,1,4,1,8])
#   returns [2,1,5,0,12]
def extractAllFieldsFrom16BitField(bitfield, listOfLengths):
    startpos=0
    returnVal=[]
    for l in listOfLengths:
        returnVal.append(extractIntFrom16BitField(bitfield, startpos, l))
        startpos=startpos+l
    return returnVal

相关问题 更多 >

    热门问题