复制字节时出错 - 偏移量和长度超出范围。

时间:2016-09-26 01:00:32

标签: c# arrays type-conversion byte buffer

我试图将2D数组值转换为byte []并返回原始2D数组。运行我的代码时出现此错误:

An unhandled exception of type 'System.ArgumentException' occurred in TestProject.exe.

Additional information: Offset and length were out of bounds 
for the array or count is greater than the number of elements from the 
index to the end of the source collection.

这是我的代码:

    byte[,] dataArray = new byte[,] {
        {4, 6, 2},
        {0, 2, 0},
        {1, 3, 4}
    };

    for (int j = 0; j < 3; j++)
    {
        for (int i = 0; i < 3; i++)
        {
            Console.WriteLine("Value[" + i + ", " + j + "] = " + dataArray[j, i]);
        }
    }
    long byteCountArray = dataArray.GetLength(0) * dataArray.GetLength(1) * sizeof(byte);

    var bufferByte = new byte[byteCountArray];

    Buffer.BlockCopy(dataArray, 0, bufferByte, 0, bufferByte.Length);

    //Here is where I try to convert the values and print them out to see if the  values are still the same:

    byte[] originalByteValues = new byte[bufferByte.Length / 2];
    Buffer.BlockCopy(bufferByte, 0, originalByteValues, 0, bufferByte.Length);
    for (int i = 0; i < 5; i++)
    {
        Console.WriteLine("Values---: " + originalByteValues[i]);
    }

Buffer.BlockCopy行发生错误:

Buffer.BlockCopy(bufferByte, 0, originalByteValues, 0, bufferByte.Length);

我是使用字节编程/转换的新手,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:2)

你使阵列太小,是你想要复制的一半大小

new byte[bufferByte.Length / 2];

似乎应该是

new byte[bufferByte.Length];