Comment mettre des bits dans un tableau de caractères

J’ai besoin de savoir comment mettre des bits dans un tableau de caractères.

par exemple,

Je veux mettre 0001 bits dans un tableau de caractères en utilisant C ou C ++.

Besoin de votre aide les gars. Merci.

Peut-être que ce code plus générique vous donnera l’idée:

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 

Est-ce vraiment tout?

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

Si vous voulez un peu masquer alors ce serait quelque chose comme

 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 vous fournissez des informations sur ce que vous essayez réellement de faire, nous pourrons peut-être vous aider davantage.

EDIT: Merci pour les informations supplémentaires. Est-ce que cela aide:

 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; // resortingeve the bytes int resortingevedBytes = *(int*)someArray; // test if a bit is set if ( resortingevedBytes & BIT_0000000000000001 ) { //do something } } 

Désormais, la dénomination des enums est intentionnellement intense pour plus de clarté. de plus, vous remarquerez qu’il n’y a que 16 bits dans l’énumération, au lieu d’un possible 32 pour un int. C’est parce que vous avez mentionné les deux premiers octets. Avec cette méthode, seuls les deux premiers octets du tableau seront modifiés à l’aide de ces énumérations. Je ne suis pas sûr si ce code serait dérangé par endianess, vous devrez donc vous assurer de tester sur vos propres machines. HTH.

Vous placez des bits dans un tableau de caractères en utilisant C ou C ++ de la même manière que vous insérez n’importe quoi – ils sont tous des bits de toute façon.

Puisque sizeof(char) == 1 par définition, vous ne pouvez mettre que 8 bits par élément du tableau.

Si vous avez besoin d’aide pour tordre des bits, c’est un problème totalement différent qui n’a rien à voir avec les caractères et les tableaux.

C ne supporte pas les littéraux binarys, vous devrez donc représenter la valeur sous forme hexadécimale.

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

Jetez un coup d’œil aux fonctions hton() et htonl() pour la conversion de valeurs multi-octets en ordre d’octets réseau.