基本上,为什么这有效?System.IO.Stream stream = new MemoryStream();int a = 4;byte[] barray = new byte[a];stream.Write(barray, 0, Marshal.SizeOf(a));当这不:System.IO.Stream stream = new MemoryStream();int a = 3;byte[] barray = new byte[a];stream.Write(barray, 0, Marshal.SizeOf(a));这是我得到的错误:The offset and length were greater than allowed for the matrix, or the number is greater than the number of elements from the index to the end of the source collection.
1 回答
不负相思意
TA贡献1777条经验 获得超10个赞
使用Marshel.SizeOf(a)时询问对象在内存中的大小。因为a是 a,int所以大小总是 4。
当你说byte[] barray = new byte[a];你说:
创建一个名为lengthbarray类型的数组。因此,在第一个代码块中创建一个长度为 4 的数组,在第二个代码块中创建一个长度为 3 的数组。两个数组都只包含零。bytea
然后你说:将(空)数组写入流,从位置 0 开始,长度为 4(Marshel.SizeOf(a)始终为 4,因为a是 int)。
第一个示例数组的长度为 4,因此有效。第二个例子只包含 3 个字节,因此长度不正确,你会得到一个错误。
如果您希望将 int 作为字节显式保存到流中,您可以调用BitConverter:
System.IO.Stream stream = new MemoryStream();
int a = 4;
byte[] barray = System.BitConverter.GetBytes(a);
stream.Write(barray, 0, Marshal.SizeOf(a));
现在你说:创建一个名为的数组barray,其中填充了整数变量的二进制表示a。
然后将填充的数组写入流。
- 1 回答
- 0 关注
- 157 浏览
添加回答
举报
0/150
提交
取消