字节数组中的C#元素无法初始化,空字节无法初始化

时间:2014-09-17 18:39:23

标签: c# bytearray indexoutofboundsexception

byte checksum;
byte[] toBuff = new byte[20];
toBuff = BitConverter.GetBytes(intNumBuffer);      
Array.Reverse(mybyte);
checksum = ComputeChecksum(toBuff); //int to byte array

// At this point, the array is something like this
//  toBuff[0] = 25
//  toBuff[1] = 0
//  toBuff[2] = 0
//  toBuff[3] = 0

toBuff[4] = checksum; //HERE IS WHERE OUR OF BOUNDS OCCURS

我是新人,非常感谢任何帮助。

由于

3 个答案:

答案 0 :(得分:1)

toBuff = BitConverter.GetBytes(intNumBuffer);

BitConverter.GetBytes()的调用会返回长度为4的字节数组,因为intNumBufferint,其大小为4。

因此,这意味着toBuff的有效索引为0,1,2和3.因此,当您使用索引4时出现错误。

现在,我想你在编写时想象的是:

byte[] toBuff = new byte[20];

toBuff的长度为20.嗯,它确实在这一点上。但是当你随后覆盖toBuff时,你会有一个新的不同的数组。

您可能需要做的事情如下:

byte[] toBuff = new byte[20];
Array.Copy(BitConverter.GetBytes(intNumBuffer), toBuff, sizeof(int)); 

或者也许:

byte[] toBuff = new byte[20];
byte[] intBytes = BitConverter.GetBytes(intNumBuffer);
Array.Copy(intBytes, toBuff, intBytes.Length); 

其中任何一个都会将调用返回的位GetBytes()复制到toBuff

答案 1 :(得分:0)

这是正常的,因为您只添加0到3范围内的项目。 你可以先检查toBuff [someIndex]是否实际上有一个值,因此不是null。

答案 2 :(得分:0)

BitCOnverter.GetBytes返回4个数组的数组:http://msdn.microsoft.com/en-us/library/de8fssa4(v=vs.110).aspx

    toBuff = BitConverter.GetBytes(intNumBuffer);