【问题标题】:Get start position of byte chunk from a byte array [duplicate]从字节数组中获取字节块的起始位置[重复]
【发布时间】:2013-06-28 07:58:56
【问题描述】:

假设我有一个大小为 4096 的字节数组,有什么有效的方法来获取与模式匹配的一个块的起始位置... 5 个字节?

例如,我想获取字节数组的第一个可能匹配的起始位置

var match = new byte[] { 0x03, 0x04, 0x05, 0x06, 0x07 };

因此,如果在我的字节数组中找到上述块,它将返回第一个字节的位置 (0x03)

【问题讨论】:

  • 如果您的搜索模式在 {0x03, 0x05},您希望看到什么样的结果?
  • 这可能对你有帮助:stackoverflow.com/questions/3028768/…
  • 另请参阅使用 Boyer-Moore 模式匹配算法的答案(这可能是我想要的):stackoverflow.com/a/9890164/106159
  • +1 表示Boyer-Moore's 模式,它非常有效,因为它会跳过不匹配的字节而不是暴力破解所有字节。

标签: c# .net arrays algorithm bytearray


【解决方案1】:

你可以使用 Linq:

public static int IndexOfArray<T>(T[] source, T[] search)
{

    var result = Enumerable.Range(0, source.Length - search.Length)
                           .Select(i => new
                           {
                               Index = i,
                               Found = source.Skip(i)
                                  .Take(search.Length)
                                  .SequenceEqual(search)
                           })
                           .FirstOrDefault(e => e.Found);
    return result == null ? -1 : result.Index;
}        

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    相关资源
    最近更新 更多