Reputation: 491
I have a 5 byte data element and I need some help in figuring out how in C++ to set an individual bit of one of these byte; Please see my sample code below:
char m_TxBuf[4];
I would like to set bit 2 to high of byte m_TxBuf[1]
.
00000 0 00 ^ This one
Any support is greatly appreciated; Thanks!
Upvotes: 4
Views: 14261
Reputation: 285057
m_TxBuf[1] |= 4;
To set a bit, you use bitwise or. The above uses compound assignment, which means the left side is one of the inputs and the output.
Upvotes: 3
Reputation: 6797
Typically we set bits using bitwise operator OR (operator| or operator|= as a shorthand).
Assuming 8-bits to a byte (where the MSB is considered the '7st' bit and the LSB considered the 0th: MSB 0) for simplicity:
char some_char = 0;
some_char |= 1 << 0; // set the 7th bit (least significant bit)
some_char |= 1 << 1; // set the 6th bit
some_char |= 1 << 2; // set the 5th bit
// etc.
We can write a simple function:
void set_bit(char& ch, unsigned int pos)
{
ch |= 1 << pos;
}
We can likewise test bits using operator&.
// If the 5th bit is set...
if (some_char & 1 << 2)
...
You should also consider std::bitset for this purpose which will make your life easier.
Upvotes: 2
Reputation: 11638
"...set bit 2..."
I would like to set bit 2 to high of byte m_TxBuf[1];
m_TxBuf[1] |= 1 << 2
Upvotes: 13
Reputation: 19064
int bitPos = 2; // bit position to set
m_TxBuf[1] |= (1 << bitPos);
Upvotes: 3
Reputation: 60043
You can use bitwise-or (|
) to set individual bits, and bitwise-and (&
) to clear them.
Upvotes: 4