Это действительно все?
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 бит, вместо возможных 32 для целого числа. Это потому, что вы упомянули первые два байта. Используя этот метод, только первые два байта массива будут изменены, используя эти перечисления. Я не уверен, что этот код будет испорчен порядком байтов, поэтому вам нужно будет убедиться, что вы тестируете на своих машинах. НТН.