Скорее всего что-то совсем кривое, всё таки. Код в студию!
Приведение 32х бит к 16ти не должно приводить к такому отказу.
Попробуйте поменять формат в sprintf на long int, вроде, %ld для
знакового. Есть ли вариант перепаковать члены структуры, чтобы начинать с больших?
Попробуйте в объявление структуры добавить __attribute__ ((packed)). Тогда компилятор будет явно знать, что структура упакована и, по идее, по необходимости, должен получать доступ к членам с учётом невыровненности.