为了账号安全,请及时绑定邮箱和手机立即绑定

stream.write 如何工作?

stream.write 如何工作?

C#
繁星淼淼 2021-11-28 19:55:55
基本上,为什么这有效?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。


然后将填充的数组写入流。


查看完整回答
反对 回复 2021-11-28
  • 1 回答
  • 0 关注
  • 157 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信