查找字节序列并返回起始位置

时间:2018-08-01 15:02:40

标签: c# file byte filestream

我有一个大文件,我需要在其中搜索7个字节的序列,然后返回该序列在该文件中的位置。我无法发布任何代码,因为到目前为止我还无法编写任何体面的代码。谁能指出我正确的方向?也许有一个我不知道存在的功能?

示例 给定这样的文件: enter image description here

我想找到F8 1E 13 B9 E4 28 88的位置,在这种情况下,该位置在0x21

1 个答案:

答案 0 :(得分:0)

这是一个很好的扩展方法:

public static class ByteArrayExtensions
{ 
    public static int IndexOf(this byte[] sequence, byte[] pattern)
    {
        var patternLength = pattern.Length;
        var matchCount = 0;

        for (var i = 0; i < sequence.Length; i++) 
        {
            if (sequence[i] == pattern[matchCount])
            {
                matchCount++;
                if (matchCount == patternLength) 
                {
                    return i - patternLength + 1;
                }
            }
            else
            {
                matchCount = 0;
            }
        }

        return -1;
    }
}

然后您可以找到它,如下所示:

var bytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x010 };

var index = bytes.IndexOf(new byte[] { 0x03, 0x04, 0x05 });