如何将位放入字符数组中

我需要知道如何将位放入字符数组中。

例如,

我想使用C或C ++将0001位放入字符数组中。

需要你帮助的人。 谢谢。

也许这个更通用的代码会给你这个想法:

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 

那是真的吗?

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

如果你想要比特掩盖那么它就像是

 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; 

如果您提供有关您实际尝试的信息,我们可能会为您提供更多帮助。

编辑:感谢您提供额外信息。 这有用吗:

 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 } } 

现在,为了清晰起见,枚举的命名是有意识的。 你也可能注意到枚举中只有16位,而不是int的32位。 这是因为你提到了前两个字节。 使用此方法,只使用这些枚举更改数组的前两个字节。 我不确定这个代码是否会被endianess搞砸,所以你必须确保在自己的机器上进行测试。 HTH。

使用C或C ++将字符串放入字符数组中,就像把任何东西放入其他东西一样 – 无论如何它们都是位。

由于sizeof(char) == 1的定义,每个元素的元素只能放8位。

如果您需要有关如何旋转位的帮助,这是一个完全不同的问题,与char和数组无关。

C不支持二进制文字,因此您必须将值表示为hex。

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

查看函数hton()htonl() ,将多字节值转换为network-byte-order。