我有这样的代码
static void Main(string[] args)
{
byte[] array = new byte[2] { 0x00, 0x1f };
Console.WriteLine(BitConverter.ToInt32(array, 0));
}
然而,它并没有起作用。 它抛出了一个异常:
目标数组的长度不足以复制集合中的所有项目。 请检查数组索引和长度。
问题出在哪里?
我有这样的代码
static void Main(string[] args)
{
byte[] array = new byte[2] { 0x00, 0x1f };
Console.WriteLine(BitConverter.ToInt32(array, 0));
}
然而,它并没有起作用。 它抛出了一个异常:
目标数组的长度不足以复制集合中的所有项目。 请检查数组索引和长度。
问题出在哪里?
Int32
由4个字节组成,但数组只有2个。解决方法之一是先转换为Int16
,然后再转换为Int32
。
Console.WriteLine((Int32)(BitConverter.ToInt16(array, 0)));
请注意,在此特定用法中,从 Int16 转换为 Int32 不会改变任何内容,因为数字打印出来相同。这是一个老问题,但对于.NET Core/.NET Standard > 2.1,有新的解决方案:
System.Buffers.Binary.BinaryPrimitives
类提供了两个静态方法ReadInt32BigEndian
和ReadInt32LittleEndian
,用于此目的。
使用这些方法有两个优点:
Span<T>
,这可能是性能上的优势,具体取决于情况。
Int32
转换是多余的。 - computercarguy