2012-06-26 3 views
12

Existe-t-il une fonction prédéfinie disponible pour convertir un byte en BitArray? Un moyen serait d'inspecter chaque bit de la valeur byte puis d'effectuer l'opération bit à bit. Je me demandais s'il y a un moyen qui est plus simple que cela.Conversion de l'octet C# en BitArray

+0

Vous devriez reformuler votre question. Voulez-vous convertir le tableau byte ou byte en System.Collections.BitArray? – adatapost

+0

ma situation exacte est de convertir 3 octets à partir d'un tableau d'octets. La méthode décrite ci-dessous fonctionnerait pour moi. –

Répondre

28

Oui, en utilisant le BitArray() constructor approprié comme décrit here:

var bits = new BitArray(arrayOfBytes); 

Vous pouvez l'appeler avec new BitArray(new byte[] { yourBite }) pour créer un tableau d'un octet.

+0

que diriez-vous de trois octets à la fois, dites quelque chose comme: nouveau BitArray (nouvel octet [] {myBite1, myBite2, myBite2}) –

+5

@ShamimHafiz que diriez-vous de l'essayer? ;-) Ça devrait marcher. – CodeCaster

7

si vous avez un numéro d'octet ou même un entier, etc.

BitArray myBA = new BitArray(BitConverter.GetBytes(myNumber).ToArray()); 

Note: vous avez besoin d'une référence à System.Linq

2

La solution est simple, il suffit de deux instructions (qui sont marqués dans code suivant), il suffit de convertir octet en binaire en utilisant Convert.ToString(btindx,2), zéro la chaîne résultante à 8 bits (ou longueurs 8), strBin.PadLeft(8,'0'); et concaténer toutes les chaînes binaires pour former un flux binaire de votre tableau d'octets, Si vous le souhaitez, vous pouvez également former un tableau de chaînes pour séparer la représentation binaire de chaque octet.

byte[] bt = new byte[2] {1,2}; 

    string strBin =string.Empty; 
    byte btindx = 0; 
    string strAllbin = string.Empty; 

    for (int i = 0; i < bt.Length; i++) 
    { 
     btindx = bt[i]; 

     strBin = Convert.ToString(btindx,2); // Convert from Byte to Bin 
     strBin = strBin.PadLeft(8,'0'); // Zero Pad 

     strAllbin += strBin; 
    }