에서 비트 필드의 정렬, 내가 편리하게 2 바이트 값에 액세스 할 수있는 노동 조합 만들려고 해요 : 나는 pixel.r = 5를 볼 것으로 예상하고 있습니다VStudio C++ VStudio 2010 년 노동 조합
#pragma pack(push,1) // disable padding
typedef struct {
uint8_t r:3;
uint8_t g:3;
uint8_t b:3;
}tsRgb;
typedef union {
uint16_t raw;
tsRgb rgb;
}tPixelData;
#pragma pack(pop)
int main(){
tPixelData pixel;
pixel.raw = 0xABE5;
return 0;
}
을, pixel.g = 4, pixel.b = 7 r과 g는 괜찮지 만 b는 3입니다.
무엇이 잘못 되었나요? 나는 비트를 올바르게 정렬하지 않는다고 가정한다.
참조 : http://stackoverflow.com/questions/6043483/whybit-endianness-is-an-issue-in-bitfields/6044223#6044223 – Lundin
표준은 비트 필드에 대해 거의 보장하지 않습니다. '((un) signed) int'와'_Bool' 타입 만이 보증됩니다. – Olaf
downvoter 설명 해주십시오. 고맙습니다. –