输出值后移动数组索引位置

时间:2016-01-18 03:42:21

标签: c# arrays loops indexing

我正在开发一个模拟BinaryReader.Readbytes()方法的程序来比较我从二进制文件中提取的数据。为了测试它是否正常工作,我正在编写一个主要执行ReadBytes()方法的方法。它意味着从数组中读取指定数量的值,然后从它最后输出值的相同索引开始,并获得指定的下几个值。

我目前拥有获取指定数量值的代码。但是,当我下次调用该方法时,它会再次从数组的开头开始。我不知道哪里出错了。如果你能帮助我,那就太好了!谢谢。

以下是代码:

public class TestInformationHeaderData 
{

    private byte[] _data;
    int _index = 0;

    public TestInformationHeaderData(byte[] data) 
    {

        _data = data;
    }

    public byte[] getBytes(int count)
    {

        _index = count;
        var returnArray = new byte[count];

        for (int i = 0; i < count; i++)
        {
            returnArray[i] = _data[i];
            count++;
        }

        _index = count;
       return returnArray;
   }
}

TestInformationHeaderData test = new TestInformationHeaderData(b);
byte[] byteArray = test.getBytes(3); 
byte[] newByteArray = test.getBytes(1); 
//Here's where it starts reading from the first value again.

1 个答案:

答案 0 :(得分:0)

你没有在调用之间正确存储状态,你需要实际读取索引的值,否则存储它是没有用的。如下所示(未经测试):

public class TestInformationHeaderData 
{
        private byte[] _data;
        int _index = 0;

        public TestInformationHeaderData(byte[] data) 
        {
            _data = data;
        }

        public byte[] getBytes(int count)
        {
            var returnArray = new byte[count];
            for (int i = 0; i < count; i++)
            {
                returnArray[i] = _data[i + _index];
            }
            _index += count;
            return returnArray;

        }
}
TestInformationHeaderData test = new TestInformationHeaderData(b);
byte[] byteArray = test.getBytes(3); 
// _index now 3
byte[] newByteArray = test.getBytes(1); 
// _index now 4

为了使代码更完整,您还应该添加边界检查。