Ну я же могу сделать и так uint32_t my_index = 20*3; // реальное место в массиве
x = arr[my_index]&MASK_X; // первое поле
y = ((arr[my_index+1]&MASK_Y2)<<SHIFT_Y2) | ((arr[my_index]&MASK_Y1)>>SHIFT_Y1; // второе поле
ну и так далее...
И обратно так поля засунуть.