将BYTE数组转换为INT

use*_*200 13 c# arrays type-conversion

我有这种代码

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

但它不起作用.它引发了一个异常:

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

怎么了?

p.s*_*w.g 14

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

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


Jar*_*Par 8

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

Console.WriteLine((Int32)(BitConverter.ToInt16(array, 0)));
Run Code Online (Sandbox Code Playgroud)

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


Rob*_*ner 7

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

该类为此System.Buffers.Binary.BinaryPrimitives目的提供了两个静态方法。ReadInt32BigEndianReadInt32LittleEndian

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

  1. 它允许您明确指定您的数字是否存储为小端或大端
  2. 他们接受Span<T>这可能是一种性能优势,具体取决于具体情况。