Смещением в пределах некоей однородной структуры, верно? А у меня
там по факту кучка разнородных структур разного размера. Проще
показать, чем на словах объяснять. Вот общее объявление рабочих
структур данных: #pragma pack(1)
typedef union {
struct{
const uint8_t addr;
const FOLDER_TYPE_t type;
const FOLDER_ACCESS_TYPE_t accessType;
const uint16_t size;
void *data;
};
uint8_t datas[8];
} FOLDER_t, *pFOLDER_t;
В головной структуре - массив структур вот этого типа FOLDER_t.
Причем внутри каждой указатель void *data указывает на структуры разного типа и произвольного размера. Как здесь использовать смещение - ума не приложу. Да и не буду, в этом виде мне все нравится.
А чтобы не было дисбаланса при портировании хедера в 32-битный софт, я могу поле указателя void* сразу явно заложить 4-байтным. Тогда все структуры после упаковки будут одного размера.
К слову, данные, прилетающие через CAN, укладываются в байтовый массив по этому же указателю *data без какой-либо десериализации.