查找字节序列和 return 起始位置
Find a sequence of bytes and return the start position
我有一个大文件,我需要在其中搜索 7 个字节的序列和 return 该序列在该文件中的位置。我不会 post 任何代码,因为到目前为止我无法编写任何像样的代码。谁能指出我正确的方向?也许有一个我不知道存在的功能?
示例
给定一个这样的文件:
我想找到 F8 1E 13 B9 E4 28 88
的位置,在本例中是 0x21
这是一个很好的扩展方法:
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 });
我有一个大文件,我需要在其中搜索 7 个字节的序列和 return 该序列在该文件中的位置。我不会 post 任何代码,因为到目前为止我无法编写任何像样的代码。谁能指出我正确的方向?也许有一个我不知道存在的功能?
示例
给定一个这样的文件:
我想找到 F8 1E 13 B9 E4 28 88
的位置,在本例中是 0x21
这是一个很好的扩展方法:
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 });