2010-06-24 5 views

답변

5

사용 마스크 :

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

이 내부 매크로를 넣어 할 수 있습니다.

+2

기존 값을 업데이트하는 경우, 당신은 바이트'에 니블을 취소해야합니다

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

이처럼 사용 '새로운 값으로 orring하기 전에. 'byte = (byte & ~ 0xF) | (nibble1 & 0xF)'이며, 상위 니블에서도 마찬가지입니다. –

+1

은 변수 바이트의 이름을 지정하지 않습니다 – OlimilOops

+0

@Mike Seymour : 네 말이 맞아요, 나는 답을 편집합니다. –

1

작업 할 수있는 가장 작은 단위는 싱글 바이트입니다. 비트를 관리하려면 bitwise operators을 사용해야합니다.

-2

당신은 편의를 위해 자신에게 의사 노동 조합을 만들 수 있습니다

ByteNibbles byteNibbles(0xA, 0xB); 

BYTE data = byteNibbles.data; 
+1

하나의 멤버와의 결합은 합집합의 가치가 없습니다 ... –

+0

개념을 강화하기위한 의사 연합입니다. 나는 두 개의 버그가있는 매크로를 선호한다. – DanDan

+1

나는 매크로와 의사 노조 모두에 인라인 함수를 선호한다. ;-) –