в основном это говорит о том, что 8 битов, представленных в текущем указателе, должны интерпретироваться как "foostruct".
По моему мнению, это было бы лучше написать так:
const unsigned char aa = *buffer & 0x07;
const bool ab = (*buffer & 0x08) != 0;
const unsigned char ba = (*buffer & 0x70) >> 4;
const bool bb = (*buffer & 0x80) != 0;
Iдумаю, что гораздо более очевидно, что делается тогда.Я думаю, вам также будет проще портировать на Java таким образом ...