Question

Y at-il une alternative BitArray pour le .NET Micro Framework? Je pensais à l'aide d'un simple bool [], mais comment pouvez-vous reconvertir dans un octet []?

Dans le cadre complet, compte tenu de "bits" est un BitArray, les travaux suivants:

byte[] data = new byte[dimensions / 8];
bits.CopyTo(data, 0);

Mais je ne peux pas sembler trouver la classe BitArray dans le cadre micro

Était-ce utile?

La solution

Il est pas très difficile de reproduire la fonctionnalité de BitArray. Tout d'abord, si vous avez besoin de moins de 65 bits, alors vous pouvez le faire avec un long ou moins.

Pour définir un bit individuel:

void Set(ref long ba, int bit)
{
    ba |= 1L << bit;
}

Pour effacer un peu:

void Clear(ref long ba, int bit)
{
    long mask = 1L << bit;
    mask = ~mask;
    ba &= mask;
}

Pour voir si un bit est:

bool IsSet(long ba, int bit)
{
    long mask = 1L << bit;
    return (ba & mask) != 0;
}

Si vous avez plus de 64 bits, alors vous aurez besoin de créer un tableau (byte[], probablement), et faire la division pour déterminer quel octet / bit que vous souhaitez modifier. Les méthodes ci-dessus travail, à condition que vous modifiez le long à byte.

Par exemple, si vous avez:

byte[] myBytes = new byte[128];

Vous avez 1024 bits.

Pour définir un bit:

void Set (int bit)
{
    int byte = bit/8;
    int bitIndex = bit%8;
    myBytes[byte] |= (byte)(1 << bitIndex);
}

Les autres méthodes utilisent le même calcul pour obtenir l'octet et l'indice de bits, et le réglage, la compensation et le test d'un bit est identique à l'exemple de long ci-dessus.

Autres conseils

Vous pouvez trouver une implémentation BitArray dans la pile 802.15.4. Il suffit de chercher le kit pour BitArray.cs Porting

Je téléchargé un tableau pour .net microframework:

http://code.tinyclr.com/project/310/bitarray-class /

Hope this helps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top