2010-06-28 66 views
4

我有一個5字節的數據元素,我需要一些幫助來弄清楚如何在C++中設置這些字節中的一個字節的個別位;請參閱我下面的示例代碼:在C++中設置單獨的位

char m_TxBuf[4]; 

我想設置第2位到高位m_TxBuf[1]的。

  
00000 0 00 
    ^This one 

任何支持是非常讚賞; 謝謝!

+1

什麼? 00 **模式意味着什麼?它有14位數字,但是你說你有5個字節的數據(並顯示一個4字節數組)。將第2位設置爲「字節m_TxBuf [1]的高位」意味着什麼? – jalf 2010-06-28 21:29:58

+1

我相信他只是強調他想要創造的高位。 – 2010-06-28 21:38:25

+0

正確,只是突出了要設置的位,對於任何混淆 – 2010-06-28 21:44:38

回答

4

您可以使用按位或(|)來設置各個位,和位和(&)來清除它們。

3
m_TxBuf[1] |= 4; 

要設置一個位,可以使用按位或。以上使用了複合賦值,這意味着左側是輸入和輸出之一。

3
int bitPos = 2; // bit position to set 
m_TxBuf[1] |= (1 << bitPos); 
1

通常我們使用按位運算符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爲此目的,這將使你的生活更輕鬆。

+0

當你的意思是第8位,你的意思是1或128的值(128-000000-1) – 2010-06-28 21:38:43

+0

@JB_SO道歉,我澄清了這個帖子中令人困惑的部分。我從MSB(最高有效位)到LSB從左到右,因爲我們通常表示紙上的位。 MSB是第一位,LSB第八位。 – stinky472 2010-06-28 21:47:34

+0

因此,設置第8位,將值增加1. – stinky472 2010-06-28 21:49:07

0

只需使用std :: bitset < 40>,然後直接對位進行索引。