BinaryReader пропускает вперед в позиции

Ниже приведен мой цикл BinaryReader, я попытался пройти по нему, чтобы увидеть, что происходит, но когда он возвращается к установке переменной Position, он переходит от "433939" к "433941", с ним ничего не взаимодействует, он не не меняется при прохождении этого цикла, но вместо перехода с 433939 на 433940 он пропускается. Есть что-то, чего я здесь не хватает?

while (Binary.BaseStream.Position < Binary.BaseStream.Length)
{
    CurrentData = Binary.ReadByte().ToString("X2");
    Position = Binary.BaseStream.Position;

    if (CurrentData == "FF")
    {
        if (ImageFound == false)
        {
            if (Binary.ReadByte().ToString("X2") == "D8")
            {
                Console.WriteLine("Header Found!");
                ImageFound = true;
                Binary.BaseStream.Position = Position;
                continue;
            }
        }
        if (ImageFound == true)
        {
            if (Binary.ReadByte().ToString("X2") == "D9")
            {
                Console.WriteLine("Footer Fount!");
                ImageFound = false;
                Image.Append(Binary.ReadByte().ToString("FFD9"));
                File.WriteAllText(new Random().Next().ToString() + ".bin", Image.ToString());
                Console.ReadLine();
                continue;
             }
         }
     }
     if (ImageFound == true)
     {
         Image.Append(CurrentData);
         continue;
     }
}

Я действительно не вижу, где это идет не так, как я сказал, что переступить или точки останова не помогают вообще, что не очень хорошо.

1 ответ

Решение

О, я чувствую себя глупо, мне нужно сделать перерыв или выпить кофе. Проблема заключалась в том, что я продвигал позицию для сравнения, а не сбрасывал ее, если она не удалась.

if (Binary.ReadByte().ToString("X2") == "D9")

Опережал его на один байт и возвращал false, поэтому мне просто нужно было добавить и сказать:

Binary.BaseStream.Position--;
Другие вопросы по тегам