2010-06-24 84 views

回答

5

使用口罩:

char byte; 
byte = (byte & 0xF0) | (nibble1 & 0xF); // write low quartet 
byte = (byte & 0x0F) | ((nibble2 & 0xF) << 4); // write high quartet 

你可能想把這裏面的宏。

+2

如果要更新現有的值,你需要清除四位在'字節在享受新價值之前。 'byte =(byte&〜0xF)| (nibble1&0xF)',並且類似於頂級半字節。 – 2010-06-24 13:32:36

+1

不會命名變量字節 – OlimilOops 2010-06-24 13:36:41

+0

@Mike Seymour:你說得對,我編輯答案。 – 2010-06-24 13:37:48

1

您可以使用的最小單位是單個字節。如果你想管理這些位,你應該使用bitwise operators

-2

你可以自己創建一個僞工會爲了方便:

union ByteNibbles 
{ 
    ByteNibbles(BYTE hiNibble, BYTE loNibble) 
    { 
     data = loNibble; 
     data |= hiNibble << 4; 
    } 

    BYTE data; 
}; 

使用方法如下:

ByteNibbles byteNibbles(0xA, 0xB); 

BYTE data = byteNibbles.data; 
+1

與一個成員的聯盟不值得成爲工會...... – 2010-06-24 14:42:11

+0

這是一個強化概念的僞聯盟。我更喜歡它到一些錯誤的宏。 – DanDan 2010-06-24 14:57:21

+1

我更喜歡將內聯函數同時用於宏和僞聯合。 ;-) – 2010-06-24 15:16:41