Pregunta

¿Hay una alternativa BitArray para .NET Micro Framework? Estaba pensando en el simple uso de un bool [], pero ¿cómo se puede convertir de nuevo en un byte []?

En el marco completo, teniendo en cuenta "bits" es un BitArray, las siguientes obras:

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

Pero me parece que no puede encontrar la clase BitArray en el marco de micro

¿Fue útil?

Solución

No es terriblemente difícil de duplicar la funcionalidad de BitArray. En primer lugar, si necesita menos de 65 pedazos, a continuación, puede hacerlo con un long o más pequeño.

Para establecer un bit individual:

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

Para borrar un poco:

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

Para ver si se ha establecido un poco:

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

Si usted tiene más de 64 bits, entonces usted tendrá que crear una matriz (byte[], probablemente), y hacer la división para determinar qué byte / bit que desea modificar. Los métodos anteriores trabajos voluntad, siempre y cuando cambia el long a byte.

Por ejemplo, si usted tiene:

byte[] myBytes = new byte[128];

Usted tiene 1024 bits.

Para establecer un bit:

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

Los otros métodos utilizan el mismo matemáticas para obtener el byte y el índice de bit, y el entorno, de compensación, y prueba de un bit es el mismo que con el ejemplo long anteriormente.

Otros consejos

Puede encontrar una implementación BitArray en el 802.15.4 Stack. Solo busca el kit de portabilidad para BitArray.cs

he subido una matriz para .NET microframework:

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

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top