BitArray alternative pour le .NET Micro Framework
-
29-09-2019 - |
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
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.