Pergunta

Ok, tenho uma pergunta. Eu montei uma máscara para opções. Basicamente, minha página possui uma caixa de listagem que permite várias seleções que as armazena em uma lista de números inteiros (seu valor de identificação). Existem 14 opções totais (então ID Val 1-15). A razão pela qual estou montando isso em uma máscara é porque não quero código difícil em um número, caso eu queira adicionar opções à tabela de banco de dados (de onde a caixa de listagem é presa). Além disso, não quero enviar 14 parâmetros para o meu procedimento armazenado SQL (assim codificando o número 14). Posso enviar esse número inteiro e desconstrução (etapa posterior).

No entanto, agora preciso descobrir quais bits estão definidos no meu número inteiro por outro motivo. Basicamente, eu tenho uma propriedade. O GET monta a máscara de bit a partir de uma lista de números inteiros (obtida da seleção do usuário) e retorna um número inteiro desse valor decimal binário. Aqui está o meu código montado para a construção do bitmask.

//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;

Portanto, se o primeiro, o segundo e o quarto estiverem definidos, meu número inteiro é 11. Isso funciona, testei para todas as seleções e está retornando o valor inteiro/decimal correto.

No momento, preciso de ajuda para fazer meu método definido. Isso precisa pegar o decimal/número inteiro que eu tenho, descubra quais bits são definidos e colocá -los de volta na lista. Portanto, se eu tiver 11 como meu valor, preciso colocar em uma lista de números inteiros 1,2,4. Alguém pode me ajudar?

Foi útil?

Solução

Você deve usar o BitArray classe em vez de; Ele faz as operações bit -news para você e tem uma interface simples.
Se você nunca precisará de mais de 32 booleanos, também pode usar o BitVector32 classe, que é menor.


Para responder à sua pergunta, você precisa fazer um loop sobre cada parte (usando um simples for loop) e verifique value & (1 << i) Para ver se o iA bit está definida.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top