# 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
我制定了几个函数来帮助我:
相关问题 更多 >
编程相关推荐