gpt4 book ai didi

C# 模式搜索

转载 作者:行者123 更新时间:2023-11-30 20:08:57 25 4
gpt4 key购买 nike

我有一组十六进制数,我想搜索一个文件,每次匹配时,它都会存储在文本文件的模式中找到的最后一个字节的最后一个偏移地址。

例如,模式是 '04 00 03 00 00 00 04 00 04 00 00 00 08 00' 然后每次在文件中找到它然后模式中的最后一个字节是 '00' 偏移量是读入并存储在数组中。

请提供任何帮助,这几个月来一直让我发疯。

谢谢


谢谢 Svick 它确实有效......它返回了所有匹配项,这些匹配项是我需要找到的偏移量。

但是,由于我在其中添加了一些代码,它会在第一个匹配项停止并且不会循环...有人可以指出哪里出了问题以及为什么它会在找到第一个匹配项时停止

非常感谢

最佳答案

我假设您将模式作为字符串获取。您应该做的是将其转换为字节数组。

如果要搜索的文件相对较小并且效率不是很重要,您可以简单地从文件中的每个字节开始搜索并逐字节与模式进行比较来完成。如果遍历整个模式并且所有字节都匹配,则将位置存储在结果数组中。在代码中,它会是这样的:

byte[] pattern = …;
byte[] file = …;

var result = Enumerable.Range(0, file.Length - pattern.Length + 1)
.Where(i => pattern.Select((b, j) => new { j, b })
.All(p => file[i + p.j] == p.b))
.Select(i => i + pattern.Length - 1);

此解决方案的时间复杂度为 O(HN),其中 H 是文件的长度(“haystack”),N 是图案的长度(“needle”)。

如果文件很大或者你需要快速,你应该使用KMP algorithm ,复杂度为 O(H + N)。

关于C# 模式搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6559963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com