может быть, но в том виде, что вы написали оно все равно не делает того, что нужно :) И есть ли какие-то гарантии по упаковки самих битовых полей? если таки написать как в условии
char c;
unsigned :8;
unsigned :16;
оно точно все спакует в 32 бита?
вообще терпеть ненавижу битовые поля в структурах...