#ifndef UNALIGNED_H__
#define UNALIGNED_H__
template<typename T>
struct unaligned
{
operator T() const { return Data; }
void operator =(T const & value) { Data = value; }
T Data;
} __attribute__((packed));
#endif // UNALIGNED_H__
Объявить данные как unaligned<uint16_t>, unaligned<int32_t>, unaligned<что угодно> и делать с ними что угодно. В том числе и работать с указателями на unaligned<что угодно>. Но это плюсы, да.