ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
23 июля
1182029 Топик полностью
Argon (01.03.2022 20:09, просмотров: 187) ответил Costic на Опять же по аналогии с файлами, если нужны вложенные структуры или массивы, то их положение указывается смещением (обычно переменная называется xxxOffset) от начала файла или от головной структуры или от пакета. Да, аналог указателя.
Смещением в пределах некоей однородной структуры, верно? А у меня там по факту кучка разнородных структур разного размера. Проще показать, чем на словах объяснять. Вот общее объявление рабочих структур данных: 
#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 без какой-либо десериализации.