Python 如何在int';新加坡(1000万)

Python 如何在int';新加坡(1000万),python,python-3.x,Python,Python 3.x,我正在从C#重写库,它扫描内存以查找模式。我需要扫描进程内存,从起始地址到结束,列表中大约需要1300多万字节。接下来,我需要通过条件在这个列表中找到一个模式,其中“offset”是来自迭代器的字节值 在C#中,我只使用了循环1模式,扫描大约需要800毫秒,但在python中,我没有完全学习这种语言,但我尝试了范围,大约需要35毫秒!几秒钟后,我发现的唯一东西是numpy.where,但我无法将其应用于我的情况 我尝试的是: loop_len = range(len(self.exe_image

我正在从C#重写库,它扫描内存以查找模式。我需要扫描进程内存,从起始地址到结束,列表中大约需要1300多万字节。接下来,我需要通过条件在这个列表中找到一个模式,其中“offset”是来自迭代器的字节值

在C#中,我只使用了循环1模式,扫描大约需要800毫秒,但在python中,我没有完全学习这种语言,但我尝试了范围,大约需要35毫秒!几秒钟后,我发现的唯一东西是numpy.where,但我无法将其应用于我的情况

我尝试的是:

loop_len = range(len(self.exe_image) - pattern_length)
for offset in filter(lambda o: self.__compare_data(pattern, o), loop_len):
我需要对偏移量做什么:

def __compare_data(self, pattern: Pattern, offset: int):
      return not any(filter(lambda i: pattern.mask[i] == 'x' and pattern.bytes[i] != self.exe_image[offset + i],
                              range(len(pattern.bytes))))

有什么建议吗?

Python比C#等编译语言慢得多。一种解决方案是使用类似python的编译器或类似JIT的编译器。有了这些,您只需稍加修改即可使用现有的python代码。

如果有人感兴趣,那么我使用regex+bytearray.index代替JIT。 我将exe bytearray转换为一个int值字符串,并通过regex.search找到模式,然后将其转换为bytearray,并通过bytearray.index找到索引

我的例子是:

search_for=str(pattern.bytes)[1:-1]。替换('-1','.{1,3}')#-1它是未知字节
match=re.search(搜索、执行、图像和字符串)
然后:

offset=exe_image.index(bytearray(int(i)表示匹配组(0)中的i.split(','))

在Python中搜索模式的最快方法可能是通过包含的模块使用正则表达式。@martineau不幸的是,这种方法不适合我的情况,可能是专门为循环编写dll的最简单方法?因为即使在正常情况下,C循环也需要14毫秒,而python大约需要300毫秒或更高。@JacobIRR 3.7.3Shader:您当然可以编写一个C扩展来完成它。然而,我不明白为什么使用正则表达式是行不通的——那么您的情况如何呢?