将BYTE数组转换为INT

我有这种代码

static void Main(string[] args) { byte[] array = new byte[2] { 0x00, 0x1f }; Console.WriteLine(BitConverter.ToInt32(array, 0)); } 

但它不起作用。 它引发了一个例外:

目标数组不够长,无法复制集合中的所有项目。 检查数组索引和长度。

怎么了?

顾名思义, Int32是32位或4字节,因此如果要将字节数组转换为Int32 ,则需要长度至少为4,(或者更准确地说,它需要至少4个)起始位置后的字节数)。

如果你只有两个字节,也许你想使用ToInt16

Int32由4个字节组成,但该数组只有2个。解决此问题的一种方法是首先转换为Int16然后转换为Int32

 Console.WriteLine((Int32)(BitConverter.ToInt16(array, 0))); 

请注意,在此特定用法中,从Int16转换为Int32不会更改任何内容,因为数字打印相同。

BitConverter.ToInt32上的文档说:

ToInt32方法将索引startIndex到startIndex + 3的字节转换为Int32值。

您需要指定至少4个字节,但您只需要2个字节。