C#中字节数组转整数

5
我正在尝试将字节数组转换为整数值,但是出现了异常:

“目标数组的长度不足以复制集合中的所有项。请检查数组索引和长度。”

异常出现在以下代码行:

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来自哪里。 - Beska
1
正如您所知,ToInt32()需要一个至少有4个字节的数组。而您只有2个字节,最好使用ToInt16()。 - Hans Passant
Int32被称为“Int”是因为它有32位(4个字节长)。 - Steve
int length = (int)BitConverter.ToInt16(bytes_length, 0); 长度为(int)BitConverter.ToInt16(bytes_length, 0); - jdweng
1个回答

14

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

您可以将其转换为Int16

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

或者在进行 Int32 转换之前将数组扩展两个字节。

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

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

1
当然,一旦这个问题得到纠正,之前的数组复制步骤也就不再需要了。代码应该只是 int length = BitConverter.ToInt16(data,Place_of_length); - Damien_The_Unbeliever
@Damien_The_Unbeliever 是的,没错!谢谢! - Sergey Kalinichenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接