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
我是新人,非常感谢任何帮助。
由于
答案 0 :(得分:1)
toBuff = BitConverter.GetBytes(intNumBuffer);
对BitConverter.GetBytes()
的调用会返回长度为4的字节数组,因为intNumBuffer
是int
,其大小为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);