質問

私が書くときます:

var tagType = _reader.ReadByte();

while (tagType != 8)
{
    var skip = ReadNext3Bytes() + 11;
    _reader.BaseStream.Position += skip;

    tagType = _reader.ReadByte();
}

...それは働くのですが、私が書くときます:

var tagType = _reader.ReadByte();

while (tagType != 8)
{
    _reader.BaseStream.Position += ReadNext3Bytes() + 11; 
     tagType = _reader.ReadByte();
}

...それは動作していない、と私はなぜ理解できない - 私は予期しない結果を取得しています。 ReadNext3Bytes方法HERESに:

    private long ReadNext3Bytes()
    {
        try
        {
            return Math.Abs((_reader.ReadByte() & 0xFF) * 256 * 256 + (_reader.ReadByte() & 0xFF) 
                * 256 + (_reader.ReadByte() & 0xFF));
        }
        catch 
        {
            return 0;
        }
    }

なぜことを、どのように私はそれを修正することができますか?

感謝します。

役に立ちましたか?

解決

のポジションのはののreadByte の通話中に変更されるため、

それは、あなたが見るものは、この場合と同様でどうなります:

int position = 1;
position += (position = 2) + 3;

Assert.AreEqual(6, position);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top