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

时间:2016-04-23 22:36:16

标签: 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', 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没有任何效果。

1 个答案:

答案 0 :(得分:0)

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

另外需要注意的是,如果你使用bytealigned=False(这是默认值),那么你通常不会在之后使用s.bytepos,因为当前位置可能不是字节对齐的(它会提出ByteAlignError)。你有可能bytealigned=True,这也有点快。

另请注意,您可以使用

g = s.findall('0x4140')

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