2010-07-23 10 views
-2

Comment convertir un int [,] en byte [] en C#? Certains code sera appréciéComment convertir un int [,] en byte [] en C#

EDIT:

J'ai besoin d'une fonction pour effectuer les opérations suivantes:

byte[] FuncName (int[,] Input) 
+3

Cela fait si peu de sens que ma tête fait mal. Vous devez spécifier beaucoup plus de choses - tellement plus que je ne peux même pas tout énumérer! Commençons par "Que diable est le problème que vous essayez de résoudre?" –

+0

quelques plus de détails ajoutés. – mouthpiec

+0

Que sont censés signifier '[,] int' et' [] byte'? Cela n'existe pas en C#, vous voulez probablement dire 'int [,]' et 'byte []' ... –

Répondre

3

Comme il y a très peu de détails dans votre question, je ne peux que deviner ce que vous essayez de faire ... en supposant que vous voulez « fla tten » un tableau 2D de ints dans un tableau 1D d'octets, vous pouvez faire quelque chose comme ça:

byte[] Flatten(int[,] input) 
{ 
    return input.Cast<int>().Select(i => (byte)i).ToArray(); 
} 

Notez l'appel à Cast: c'est parce que les tableaux multidimensionnels mettent en œuvre IEnumerable mais pas IEnumerable<T>

3

Il semble que vous écrivez les mauvais types, mais voici ce que vous cherchez peut-être pour:

byte[] FuncName (int[,] input) 
{ 
    byte[] byteArray = new byte[input.Length]; 

    int idx = 0; 
    foreach (int v in input) { 
     byteArray[idx++] = (byte)v; 
    } 

    return byteArray; 
} 
+1

Je donnerais votre estimation "plus susceptible d'être son but". –

+1

La mienne est plus rapide! – mquander

+0

@mquander vrai, mais le mien semble correspondre à ses besoins. –

1

Les convertis de BitConverter types primitifs à tableaux d'octets:

byte[] myByteArray = System.BitConverter.GetBytes(myInt); 

Vous semblez vouloir un tableau à deux dimensions d'ints à convertir en octets. Combinez le BitConverter avec la construction de boucle requise (par exemple foreach) et la logique que vous voulez combiner les dimensions du tableau.

2

Voici une implémentation qui suppose que vous essayez la sérialisation; aucune idée si c'est ce que vous voulez, cependant; il préfixes les dimensions, puis chaque cellule en utilisant l'encodage de base:

public byte[] Encode(int[,] input) 
{ 
    int d0 = input.GetLength(0), d1 = input.GetLength(1); 
    byte[] raw = new byte[((d0 * d1) + 2) * 4]; 
    Buffer.BlockCopy(BitConverter.GetBytes(d0), 0, raw, 0, 4); 
    Buffer.BlockCopy(BitConverter.GetBytes(d1), 0, raw, 4, 4); 
    int offset = 8; 
    for(int i0 = 0 ; i0 < d0 ; i0++) 
     for (int i1 = 0; i1 < d1; i1++) 
     { 
      Buffer.BlockCopy(BitConverter.GetBytes(input[i0,i1]), 0, 
        raw, offset, 4); 
      offset += 4; 
     } 
    return raw; 
}