2014-02-07 158 views
9

我有这样的代码转换字节数组INT

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

但是它不工作。它引发一个异常:

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

出了什么问题?

+0

BitConverter。 ** ToInt32 ** –

回答

11

顾名思义,Int32是32位或4个字节,所以如果你想将一个字节数组转换为一个Int32,它需要的长度至少为4(或者更准确地说,它需要在开始位置之后至少有4个字节)。

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

4

BitConverter.ToInt32documentation说:

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

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

5

Int32是由4个字节,但是阵列只有2之一来解决此方法是先转换成Int16然后Int32

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

注意,在这个特定的使用从Int16转换为Int32,因为数字打印相同并不能改变什么。

+0

正如写入十进制数字“10”为“0010”不会改变任何其他任何东西:额外的零是毫无意义的,当您将Int16转换为INT32。 – Andrejovich