Although the header size is fixed, this change provides an explicit indication of what the size is being used for.
I looked at this stuff again, and having the construct char header and static_assert(sizeof(header) == 32) feels weird. Might be, instead use a #define HEADER_SIZE 32 and then char header[HEADER_SIZE]; and use HEADER_SIZE.
Sorry for bike-shedding, but this is weird when seen completed.
Commit summary will be use #define for header size instead of magic number Also note that the update includes a change to keep an increasing offset rather than repeating the same expression in several places.