Python 如何从给定偏移量开始在ConstBitStream中查找二进制数据?

Python 如何从给定偏移量开始在ConstBitStream中查找二进制数据?,python,bitstring,bitstream,Python,Bitstring,Bitstream,我试图在加载为ConstBitStream的文件中查找特定字节: s = ConstBitStream(filename=myFile) found = s.find('0x4140', bytealigned=False) 这是第一次正常工作。找到第一个序列后,我想再次使用find方法找到下一个序列,但现在从偏移开始: s.bytepos = position_after_the_first_occurrence + my_offset found = s.find('0x4140', st

我试图在加载为ConstBitStream的文件中查找特定字节:

s = ConstBitStream(filename=myFile)
found = s.find('0x4140', bytealigned=False)
这是第一次正常工作。找到第一个序列后,我想再次使用
find
方法找到下一个序列,但现在从偏移开始:

s.bytepos = position_after_the_first_occurrence + my_offset
found = s.find('0x4140', start=s.bytepos, bytealigned=False)
这似乎不起作用。我总是从二进制序列的第一次出现得到位置

怎么了


更新:

(找到的第一个
s.bytepos的值
):

(找到的第二个
s.bytepos的值
):


设置
start=s.bytepos
似乎没有任何效果。
start
参数是开始搜索的位位置,而不是字节位置。要获取下一个匹配项,需要使用
start=s.bitpos+1

另一件需要注意的事情是,如果使用
bytealigned=False
(这是默认值),那么通常以后甚至不能使用
s.bytepos
,因为当前位置可能没有字节对齐(它将引发
ByteAlignError
)。很可能您想要的是
bytealigned=True
,这也要快一点

还请注意,您可以使用

g = s.findall('0x4140')

它返回一个生成器,该生成器提供所有位置,而无需执行多个
find
调用(只需重复使用
g.next()
list(g)
,即可一次获取所有位置)。

是否可以打印
find
的值(第一个值)和
s.bytepos
?不要将
s.bytepos
用作
start
参数的值,而是使用
s.pos
。确保
my_offset
计算字节,而不是位。请注意,
found
value是一个具有位偏移量的元组,而不是字节偏移量。s.pos解决了问题,但在我的情况下仍然不起作用。我写了自己的搜索算法。你应该写这封信作为答复,这样我才能接受。
s.bytepos = {int} 32969
found = {tuple} (54784, )
g = s.findall('0x4140')