【问题标题】:Shifting array index position after values have been outputted输出值后移动数组索引位置
【发布时间】:2016-01-18 03:42:20
【问题描述】:

我正在开发一个模仿BinaryReader.Readbytes() 方法的程序来比较我从二进制文件中提取的数据。为了测试它是否正常工作,我正在编写一个方法,该方法主要完成ReadBytes()method 的作用。它旨在从数组中读取指定数量的值,然后从上次输出值的同一索引开始,并获取指定的下几个值。

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

代码如下:

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.

【问题讨论】:

  • _index 的目的是什么?看起来你从不消耗价值。
  • 索引用于跟踪数组最后输出值的位置。比如说,如果在调用 getBytes(3) 时输出了数组的前 3 个值,则该索引旨在帮助在再次调用 getBytes() 方法时从数组中的位置 4 开始读取。
  • 发布你如何调用方法getBytes - 这很可能是问题的原因。
  • @vpm 这就是我的意思。您永远不会在代码中的任何位置读取 _index 的值。
  • @vpm - 您需要编辑您的问题并在此处添加代码。代码没有在 cmets 中格式化。

标签: c# arrays loops indexing


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢!我现在明白了。刚刚测试过,它也可以工作=)。
猜你喜欢
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 2021-06-11
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
相关资源
最近更新 更多