В VStudio 2010, я пытаюсь создать союз, чтобы получить доступ к стоимости 2-байтовой удобно:VStudio C++ выравнивание битового поля в союзе
#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.r = 5, pixel.g = 4, pixel.b = 7. r и g в порядке, но b равно 3.
Что я делаю неправильно? Я предполагаю, что я неправильно присваиваю биты?
См. Это http://stackoverflow.com/questions/6043483/why-bit-endianness-is-an-issue-in-bitfields/6044223#6044223 – Lundin
Стандарт почти ничего не гарантирует о битовых полях. И гарантируются только типы '((un)) int' и' _Bool'. – Olaf
downvoter сообщите пожалуйста. Спасибо. –