从偏移量中查找字节

时间:2017-08-10 06:12:22

标签: c#

所以我有这个:

public static long FindPosition(Stream stream, byte[] byteSequence)
{
     if (byteSequence.Length > stream.Length)
         return -1;

     byte[] buffer = new byte[byteSequence.Length];

     using (BufferedStream bufStream = new BufferedStream(stream, byteSequence.Length))
     {
           int i;
           while ((i = bufStream.Read(buffer, 0, byteSequence.Length)) == byteSequence.Length)
           {
                if (byteSequence.SequenceEqual(buffer))
                    return bufStream.Position - byteSequence.Length;
                else
                    bufStream.Position -= byteSequence.Length - PadLeftSequence(buffer, byteSequence);
           }                 
     }
     return  -1;
}
private static int PadLeftSequence(byte[] bytes, byte[] seqBytes)
{
     int i = 1;
     while (i < bytes.Length)
     {
          int n = bytes.Length - i;
          byte[] aux1 = new byte[n];
          byte[] aux2 = new byte[n];
          Array.Copy(bytes, i, aux1, 0, n);
          Array.Copy(seqBytes, aux2, n);
          if (aux1.SequenceEqual(aux2))
             return i;
             i++;
      }
      return i;
}

这对于获得具有特定字节集的偏移量非常有效,但现在我想做反向,从特定偏移量中找到一组字节。 我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

试试这个例子:

long offset = 100L; // Offset
int bytesCount = 20; // Number of bytes to read
byte[] buffer = new byte[bytesCount];

stream.Seek( offset, SeekOrigin.Begin ); // Set offset from Begin of a stream
stream.Read( buffer, 0, bytesCount ); // Read bytesCount from previous set offset

有关SeekRead

的更多详细信息