我正在尝试在加载为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)
这似乎不起作用。我总是从第一次出现的二进制序列中获得位置。
怎么了?
更新:
(第一个found
和s.bytepos
的值):
found = {tuple} (54784, )
s.bytepos = {int} 6848
(第二个found
和s.bytepos
的值):
s.bytepos = {int} 32969
found = {tuple} (54784, )
似乎设置start=s.bytepos
没有任何效果。
答案 0 :(得分:0)
start
参数是开始搜索的位位置,而不是字节位置。要获得下一次出现,您需要使用start=s.bitpos + 1
。
另外需要注意的是,如果你使用bytealigned=False
(这是默认值),那么你通常不会在之后使用s.bytepos
,因为当前位置可能不是字节对齐的(它会提出ByteAlignError
)。你有可能bytealigned=True
,这也有点快。
另请注意,您可以使用
g = s.findall('0x4140')
返回一个生成器,该生成器提供所有位置而无需进行多次find
调用(只需重复使用g.next()
或list(g)
一次性获取所有位置)。