J’ai ce genre de code
static void Main(ssortingng[] args) { byte[] array = new byte[2] { 0x00, 0x1f }; Console.WriteLine(BitConverter.ToInt32(array, 0)); }
Cependant cela ne fonctionne pas. Il lève une exception:
Le tableau de destination n’est pas assez long pour copier tous les éléments de la collection. Vérifiez l’index et la longueur du tableau.
Qu’est-ce qui ne va pas?
Comme son nom l’indique, un Int32
fait 32 bits ou 4 octets. Par conséquent, si vous souhaitez convertir un tableau d’octets en un Int32
, il doit avoir une longueur d’au moins 4 (ou plus précisément, il doit avoir au moins 4 octets après la position de départ).
Si tout ce que vous avez est deux octets, peut-être que vous ToInt16
utiliser ToInt16
?
Un Int32
est composé de 4 octets, mais le tableau n’en a que 2. Un moyen de contourner ce Int16
est de convertir d’abord en Int16
, puis en Int32
Console.WriteLine((Int32)(BitConverter.ToInt16(array, 0)));
Notez que dans cette utilisation spécifique, la conversion de Int16
en Int32
partir de rien ne change rien, car les chiffres sont identiques.
La documentation sur BitConverter.ToInt32
dit:
La méthode ToInt32 convertit les octets d’index startIndex en startIndex + 3 en une valeur Int32.
Vous devez spécifier au moins 4 octets, mais vous n’en avez que 2.