2015-12-31 1 views
4

Je triyng convertir tableau d'octets en une valeur int mais je reçois une exception:tableau d'octets int C#

« tableau de destination n'est pas assez longtemps pour copier tous les éléments de la collection . Vérifiez l'index et la longueur du tableau. "

l'exception est en ligne:

int length = BitConverter.ToInt32(bytes_length, 0); 

octet _length contient la valeur (0x00,0x09);

voici mon code:

byte[] bytes_length = new byte[Value_of_length];     
//copy the byte byte array to the correct length. 
Array.Copy(data, Place_of_length, bytes_length, 0,bytes_length.Length 
int length = BitConverter.ToInt32(bytes_length, 0); 
+0

Cet exemple de code ne semble pas être complète. De manière critique, nous ne pouvons pas voir d'où vient la valeur de la longueur de la longueur. – Beska

+1

Comme vous pouvez le constater, ToInt32() nécessite un tableau d'au moins 4 octets. Vous n'avez que 2, vous pouvez au mieux appeler ToInt16(). –

+0

Int32 est appelé ainsi parce qu'il a 32 bits (4 octets de long) – Steve

Répondre

11

Int32 a besoin de 32 bits ou quatre octets. Votre tableau contient seulement deux octets, ce qui signifie que vous ne pouvez pas le convertir en Int32.

Vous pouvez le convertir en Int16

int length = BitConverter.ToInt16(bytes_length, 0); 

ou d'étendre deux octets au tableau avant Int32 conversion.

De plus, vous pouvez ignorer la copie tout à fait:

int length = BitConverter.ToInt16(data, Place_of_length); 
+3

Vous voulez dire 4 octets? Vous l'avez édité :) – Sybren

+1

Et, bien sûr, une fois que cela est corrigé, il n'y a pas besoin de copier les tableaux qui viennent avant. Il devrait simplement être 'int length = BitConverter.ToInt16 (data, Place_of_length);'. –

+0

@Damien_The_Unbeliever Oui, c'est vrai! Je vous remercie! – dasblinkenlight