web-dev-qa-db-fra.com

Conversion d'un int [] en octet [] en C #

Je sais comment faire cela à long terme: en créant un tableau d'octets de la taille nécessaire et en utilisant une boucle for pour projeter tous les éléments du tableau int. 

Je me demandais s'il y avait un moyen plus rapide, car il semblerait que la méthode ci-dessus se brise si la variable int est plus grande qu'une sbyte.

37
soandos

Si vous voulez une copie au niveau du bit, c’est-à-dire obtenir 4 octets sur un entier, utilisez Buffer.BlockCopy :

byte[] result = new byte[intArray.Length * sizeof(int)];
Buffer.BlockCopy(intArray, 0, result, 0, result.Length);

N'utilisez pas Array.Copy , car il tentera de convertir et non de copier. Voir les remarques sur la page MSDN pour plus d'informations.

82
Daniel Hilgarth

Outre la réponse acceptée (que j'utilise maintenant), une solution alternative pour les amateurs de Linq serait:

byte[] bytes = ints.SelectMany(BitConverter.GetBytes).ToArray(); 

Je suppose cependant que ce serait plus lent ... 

5
heltonbiker
int[] ints = { 1, 2, 3, 4, 5, 6 };
byte[] bytes = ints.Select(x => (byte)x).ToArray();
0