Cómo poner bits en una matriz de caracteres

Necesito saber cómo poner bits en una matriz de caracteres.

por ejemplo,

Quiero poner 0001 bits en una matriz de caracteres utilizando C o C ++.

Necesito su ayuda chicos. Gracias.

Quizás este código más genérico te dé la idea:

void setBitAt( char* buf, int bufByteSize, int bitPosition, bool value ) { if(bitPosition < sizeof(char)*8*bufByteSize) { int byteOffset= bitPosition/8; int bitOffset = bitPosition - byteOffset*8; if(value == true) { buf[byteOffset] |= (1 << bitOffset); } else { buf[byteOffset] &= ~(1 << bitOffset);; } } } //use it as follow: char chArray[16]; setBitAt(chArray,16*sizeof(char),5,true); //to set bit at pos 5 to 1 

¿Eso es realmente todo?

 char buf[1]; buf[0] = char(1); 

Si quieres un poco de máscara, entonces sería algo así como

 enum Enum { MASK_01 = 0x1, MASK_02 = 0x2, MASK_03 = 0x4, MASK_04 = 0x8, }; char buf[4]; buf[0] = Enum::MASK_01; buf[1] = Enum::MASK_02; buf[2] = Enum::MASK_03; buf[3] = Enum::MASK_04; 

Si proporciona información sobre lo que realmente está tratando de hacer, es posible que podamos ayudarlo más.

EDIT: Gracias por la información adicional. ¿Esto ayuda?

 enum Enum { BIT_0000000000000001 = 0x0001, BIT_0000000000000010 = 0x0002, BIT_0000000000000100 = 0x0004, BIT_0000000000001000 = 0x0008, BIT_0000000000010000 = 0x0010, BIT_0000000000100000 = 0x0020, BIT_0000000001000000 = 0x0040, BIT_0000000010000000 = 0x0080, BIT_0000000100000000 = 0x0100, BIT_0000001000000000 = 0x0200, BIT_0000010000000000 = 0x0400, BIT_0000100000000000 = 0x0800, BIT_0001000000000000 = 0x1000, BIT_0010000000000000 = 0x2000, BIT_0100000000000000 = 0x4000, BIT_1000000000000000 = 0x8000, }; int main( int argc, char* argv[] ) { char someArray[8]; memset( someArray, 0, 8 ); // create an int with the bits you want set int combinedBits = BIT_0000000000000001| BIT_0000000000000010| BIT_1000000000000000; // clear first two bytes memset( someArray, 0, 2 ); // set the first two bytes in the array *(int*)someArray |= combinedBits; // retrieve the bytes int retrievedBytes = *(int*)someArray; // test if a bit is set if ( retrievedBytes & BIT_0000000000000001 ) { //do something } } 

Ahora el nombramiento de los enums es intencionalmente intenso para mayor claridad. también puede observar que solo hay 16 bits en la enumeración, en lugar de los 32 posibles para un int. Esto es porque mencionaste los primeros dos bytes. Usando este método, solo se cambiarán los primeros dos bytes de la matriz, usando esas enumeraciones. No estoy seguro de si Endianess estropearía este código, por lo que tendrá que asegurarse de probar en sus propias máquinas. HTH.

Pones bits en una matriz de caracteres usando C o C ++ de la misma forma que pones cualquier cosa en otra cosa, todos son bits de todos modos.

Como sizeof(char) == 1 por definición, solo puede poner 8 bits por elemento de la matriz.

Si necesita ayuda sobre cómo dividir bits, ese es un problema completamente diferente y no tiene nada que ver con los caracteres y las matrices.

C no admite literales binarios, por lo que deberá representar el valor como hexadecimal.

 char *p; *p++ = 0x10; *p++ = 0xFE; 

Eche un vistazo a las funciones hton() y htonl() para convertir valores de múltiples bytes a orden de bytes de red.