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

How to find binary data within ConstBitStream starting from a given offset?

我正在尝试在作为 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)

这似乎不起作用。我总是从我的二进制序列第一次出现时得到位置。

怎么了?


更新:

(第一个 founds.bytepos 的值):

found = {tuple} (54784, )
s.bytepos = {int} 6848

(第二个 founds.bytepos 的值):

s.bytepos = {int} 32969
found = {tuple} (54784, )

好像设置start=s.bytepos没有任何效果

start参数是开始查找的位位置,不是字节位置。要获得下一次出现,您需要使用 start=s.bitpos + 1.

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

另请注意,您可以只使用

g = s.findall('0x4140')

which returns 一个生成器,无需多次 find 调用即可给出所有位置(只需重复使用 g.next()list(g) 一次获取所有位置).