【问题标题】:C# byte array doesn't allocate correctlyC# 字节数组未正确分配
【发布时间】:2013-08-16 20:12:41
【问题描述】:

我正在尝试在 C# 中序列化一个对象。我得到了对象大小并将其保存在上面屏幕截图中第 207 行的变量 size1 中。 Size1 的值为 160。然后我在第 210 行使用 size1 分配了一个名为 buf 的字节数组。Buf 是一个 2 字节数组!这怎么可能?!

【问题讨论】:

  • 尝试在此处发布您的代码而不是打印图像!
  • 至少“210行”是什么,非常明显:P
  • 你怎么知道 size1 的值为 160?
  • 该图还显示了运行时局部变量的值。由于我要说明的是运行时行为,因此该图像是合适的。此外,当我说 byte[] buf = new byte[size1] 导致 buf 有 2 个字节,尽管 size1 的值为 160 时,没人会相信我!运行时行为的形象说明了我的情况。
  • 图片将是合适的如果您包含一些示例源代码,我们可以将其复制到我们自己的 IDE 中并自己尝试。

标签: c# serialization allocation


【解决方案1】:

问题来了

byte[] buf = new byte[size1];
byte[] buf2 = new byte[16];
buf = b.ReadBytes(...); //<----

您将buf 替换为ReadBytes 的结果。这会丢弃您的原始数组并将其替换为从 ReadBytes 返回的数组(在您的情况下是一个两字节数组)

【讨论】:

  • 没错!不敢相信我犯了一个经典的新手错误,即调试窗口中显示的局部变量的值是程序停止/中断点的程序状态,而不是断点之前的一些任意行。我仍然必须找出 b.ReadBytes(...) 的问题,但至少我会走正确的小巷。谢谢斯科特!
【解决方案2】:

ReadBytes() 返回一个byte[]。当你写

buf = b.ReadBytes(Marshal.SizeOf(firstRecord));

然后buf 指向一个完全不同的byte[],它等于返回的b.ReadBytes()

【讨论】:

    【解决方案3】:

    看起来您正在尝试将某些对象转换为字节数组,这个答案可能会有所帮助。 Convert any object to a byte[]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      相关资源
      最近更新 更多