Bonjour,
Je souhaite remonter des infos bas niveau et désire les stocker dans une structure contenant une union pour ne pas gaspiller trop de memoire inutilement.
Dans mon union sont définis 2 structures d'infos, dont l'une d'entre elles est elle meme decoupée en 2.
Mon probleme est que lorsque je recupere bas niveau les data, je ne sais pas encore de quelle type elles seront (Info1 ou Info2) et je ne souhaite pas faire cette reconnaissance (c'est justement le job fait au haut niveau)
Ma question est donc, faut il toujours factoriser les champs pour avoir un premier champs commun précédant l'union et faire un memmove des data sur ce premier champs (l'union sera remplie sans savoir encore de quel type il s'agit [Question: l'ordre des champs est il garantie ?]).
Ou alors est il possible de faire un memmove sur l'union directement et non un des champs de son contenu, dans le cas ou il n'y a pas de factorisation?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 typedef struct COMPO_INFO_struct { unsigned char IdInfo; union { struct // INFO1 { ENTETE_INFO1 EnteteInfo; }Info1; struct // INFO2 { ENTETE_INFO2 EnteteInfo; }Info2; }info; }COMPO_INFO; // Et pour affecter le contenu: COMPO_INFO message memmove(&message.IdInfo, buffer, bufferSize) // buffer contenant soit un info1 soit un info2
Mes questions portent donc sur ce qui est possible de faire, et surtout sur quelle solution adopter lorsque l'on utilise les unions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 typedef struct COMPO_INFO_struct { union { struct // INFO1 { unsigned char IdInfo; ENTETE_INFO1 EnteteInfo; }Info1; struct // INFO2 { unsigned char IdInfo; ENTETE_INFO2 EnteteInfo; }Info2; }info; }COMPO_INFO; // Et faire quelque chose du genre: COMPO_INFO message memmove(&message.info, buffer, bufferSize) // Je pense pas que cela marche mais c'est pour l'idee
Merci beaucoup d'avance,
Bonne fin de journée
Partager