【问题标题】:Byte array to int C#字节数组到 int C#
【发布时间】:2016-04-05 11:52:53
【问题描述】:

我正在尝试将字节数组转换为 int 值 但是我遇到了一个例外:

"目标数组不够长,无法复制 收藏。检查数组索引和长度。”

异常上线:

int length = BitConverter.ToInt32(bytes_length, 0);

byte_length包含值(0x00,0x09);

这是我的代码:

byte[] bytes_length = new byte[Value_of_length];                   
//copy the byte byte array to the correct length.
Array.Copy(data, Place_of_length, bytes_length, 0,bytes_length.Length
int length = BitConverter.ToInt32(bytes_length, 0);

【问题讨论】:

  • 此代码示例似乎不完整。至关重要的是,我们看不到 Value_of_length 的来源。
  • 如您所知,ToInt32() 需要一个至少有 4 个字节的数组。你只有 2 个,你最多可以调用 ToInt16()。
  • Int32 之所以这么称呼是因为它有 32 位(4 字节长)
  • int 长度 = (int)BitConverter.ToInt16(bytes_length, 0);

标签: c# arrays bitconverter


【解决方案1】:

Int32 需要 32 位或四个字节。您的数组仅包含两个字节,这意味着您无法将其转换为Int32

您可以将其转换为Int16

int length = BitConverter.ToInt16(bytes_length, 0);

或在Int32 转换之前再向数组扩展两个字节。

此外,您可以完全跳过复制:

int length = BitConverter.ToInt16(data, Place_of_length);

【讨论】:

  • 当然,一旦纠正了这个问题,就不需要前面的数组复制步骤了。它应该只是int length = BitConverter.ToInt16(data,Place_of_length);
  • @Damien_The_Unbeliever 是的,没错!谢谢!
猜你喜欢
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 2010-11-22
相关资源
最近更新 更多