AFAIK a union should in any case have the same length in memory.
That would require `u_int16 w[2];`.