2017-08-10 96 views
0

字节所以我有这样的:查找偏移

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; 
} 

这完美的作品来获得偏移具有特定字节集,但现在我想要做的倒数,发现从一组字节一个特定的抵消。 我该怎么做?

+0

寻求或读取第一偏移?也许创建一个你想做的事情的例子输入和输出,这有点不清楚你想要做什么。 – CodeCaster

+0

对不起,我在这件事情上是一个大白菜,我发现代码和工作为我想要的,我没有自己写。你能分享一个寻求或阅读的例子吗?也许以抵消0x763AFC为例?我知道我很懒,但我已经尝试了很多方法,我在这里找到了stackoverflow,并没有能够使它的工作:/编辑:会像get byte [] {0xXX,0xYY,0xZZ,0xXY, 0xYX}偏移量0x00763AFC – user1913644

+0

'byte [] ReadBytes(Stream stream,long offset,long bytesCount)'这是你需要的吗?读取特定字节从特定偏移量计数? – Dmitry

回答

0

试试这个例子:

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

+0

完美的作品,谢谢:) – user1913644

+0

@ user1913644不客气))标记此答案,如果它是正确的。 – Dmitry