Pergunta

Eu estou trabalhando em um aplicativo baseado em TCP que os processos bitpacked mensagens, o que significa: As mensagens transmitidas / recebidas não são byte alinhado. Por exemplo 3 bits representam o campo 1, onde 19 bits pode representar campo 2. A minha pergunta é, alguém sabe de uma biblioteca C # que pode levar um conjunto de bytes e set / obter uma gama arbitrária de bits dentro desses bytes? Eu vi & criado utilitários semelhantes em C / C ++, mas eu preciso de uma solução 100% C # e eu não quero re-inventar a roda novamente.

Eu olhei para a classe BitArray, mas não permite referenciar intervalos arbitrários de bits.

Foi útil?

Solução

Confira este CodeProject solução - é uma fonte aberta conseguiu BitStream classe pode ser chamado de C #.

Outras dicas

Eu não estou ciente de quaisquer classes BCL que fornecem o que você quer. Mas você pode usar operações bit a bit (shift, e, ou, ...) para extrair os campos de seu interesse.

Por exemplo, para obter um campo a partir de bit 2 com um tamanho de 5 bits usar:

int extract = (source & 0x7C) >> 2;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top