将BYTE数组转换为INT

时间:2014-02-07 23:23:01

标签: c# arrays type-conversion

我有这种代码

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

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

  

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

有什么问题?

4 个答案:

答案 0 :(得分:14)

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

如果您只有两个字节,那么您可能想要使用ToInt16

答案 1 :(得分:7)

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

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

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

答案 2 :(得分:4)

BitConverter.ToInt32上的documentation说:

  

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

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

答案 3 :(得分:1)

这是一个古老的问题,但是对于.NET Core / .NET Standard> 2.1,有一个新的解决方案:

System.Buffers.Binary.BinaryPrimitives class为此提供了两个静态方法ReadInt32BigEndianReadInt32LittleEndian

使用这些方法有两个优点:

  1. 它使您可以明确指定您的号码是否存储为little endian or big endian
  2. 根据情况,他们接受Span<T>可能是性能上的优势。