Pregunta

De acuerdo, tengo una pregunta. He montado una máscara de bits para las opciones. Básicamente mi página tiene un cuadro de lista que permite seleccionar varias opciones que los almacena en una lista de números enteros (su valor de ID). Hay 14 opciones totales (por lo Identificación val 1-15). La razón por la que estoy armando esto en una máscara de bits se debe a que no quiero a codificar en un número en caso quiero añadir opciones a la tabla de base de datos (donde el cuadro de lista de Puebla). Además, no quiero ser el envío de 14 parámetros a mi procedimiento almacenado de SQL (hardcoding por tanto, en el número 14). Puedo enviar en este número entero y la deconstrucción ella (paso posterior).

Sin embargo, ahora tengo que averiguar qué bits se establecen en mi número entero por otra razón. Básicamente tengo una propiedad. El get ensambla la máscara de bits de una lista de números enteros (obtenido de la selección del usuario) y devuelve un número entero de ese valor decimal binario. Aquí está mi código ensamblado para la construcción de la máscara de bits.

//optsNum is my integer list. This is the list containing the ID nums of the selections.
//so if the user selects the first, second, and fourth option, the list contains 1,2,4 (count 3)
//typeCount is an integer of the amount of options in the list box
int total = 0;
for (int c = 0; c < optsNum.Count(); ++c)
{
    for (int i = 0; i <= typeCount; i++)
    {
        if ((i + 1) == optsNum[c})
            total += (1 << i);
    }
}
return total;

Así que si el primer, segundo y cuarto se establece, mi entero es 11. Estos trabajos, he probado para todas las selecciones y se devuelve el valor entero / decimal correcto.

Ahora mismo necesita ayuda para hacer mi método set. Esto tiene que tomar el decimal / entero que tengo, saber qué bits se establecen y se colocan los de nuevo en la lista. Así que si tengo 11 como el valor de mi, tengo que poner en una lista de números enteros 1,2,4. ¿Alguien puede ayudarme?

¿Fue útil?

Solución

Se debe utilizar la BitArray clase lugar; Se hace el operaciones bit a bit para usted y tiene una interfaz sencilla.
Si usted nunca necesitará más de 32 booleanos, también se puede utilizar el BitVector32 clase, que es más pequeño.


Para responder a su pregunta, es necesario para recorrer todos los bits (usando un simple un bucle for) y cheque value & (1 << i) para ver si el bit se establece ith.

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