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