3

我试图在加载为 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)

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

怎么了?


更新:

(firstfound和的值s.bytepos):

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

(第二个found和的值s.bytepos):

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

似乎设置start=s.bytepos没有任何效果。

4

1 回答 1

1

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

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

另请注意,您可以只使用

g = s.findall('0x4140')

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

于 2016-05-05T20:40:30.507 回答