struct start { uint asdf:12; uint qwer:4; byte len; char str[]; } struct end { uint aaa:15; uint flag:1; } struct packet { struct start *start; struct end *end; } struct packet raw_to_packet(byte *data) { struct packet packet; struct start *start = data; packet.start = start; packet.end = start->str + start->len; return packet; }