Gerenciando pouco embalado dados usando C #
-
16-09-2019 - |
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.
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;