我有一個5字節的數據元素,我需要一些幫助來弄清楚如何在C++中設置這些字節中的一個字節的個別位;請參閱我下面的示例代碼:在C++中設置單獨的位
char m_TxBuf[4];
我想設置第2位到高位m_TxBuf[1]
的。
00000 0 00 ^This one
任何支持是非常讚賞; 謝謝!
我有一個5字節的數據元素,我需要一些幫助來弄清楚如何在C++中設置這些字節中的一個字節的個別位;請參閱我下面的示例代碼:在C++中設置單獨的位
char m_TxBuf[4];
我想設置第2位到高位m_TxBuf[1]
的。
00000 0 00 ^This one
任何支持是非常讚賞; 謝謝!
「...設置位2 ...」
I would like to set bit 2 to high of byte m_TxBuf[1];
m_TxBuf[1] |= 1 << 2
您可以使用按位或(|
)來設置各個位,和位和(&
)來清除它們。
m_TxBuf[1] |= 4;
要設置一個位,可以使用按位或。以上使用了複合賦值,這意味着左側是輸入和輸出之一。
int bitPos = 2; // bit position to set
m_TxBuf[1] |= (1 << bitPos);
通常我們使用按位運算符OR(運算符|或運算符| =作爲簡寫)來設置位。
假設8位爲一個字節(其中MSB被認爲是「7ST」位和LSB考慮第0:MSB 0)爲簡化起見:
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.
我們可以寫一個簡單函數:
void set_bit(char& ch, unsigned int pos)
{
ch |= 1 << pos;
}
我們也可以使用運算符&來測試比特。
// If the 5th bit is set...
if (some_char & 1 << 2)
...
你也應該考慮std :: bitset爲此目的,這將使你的生活更輕鬆。
只需使用std :: bitset < 40>,然後直接對位進行索引。
什麼? 00 **模式意味着什麼?它有14位數字,但是你說你有5個字節的數據(並顯示一個4字節數組)。將第2位設置爲「字節m_TxBuf [1]的高位」意味着什麼? – jalf 2010-06-28 21:29:58
我相信他只是強調他想要創造的高位。 – 2010-06-28 21:38:25
正確,只是突出了要設置的位,對於任何混淆 – 2010-06-28 21:44:38