Bonjour,

J'ai une array en format 8b avec des données de différents formats suivant un indicatif :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
uint8_t donnees[] = {1, 50, 2, 60, 125, 1, 72, 3, 80};
Actuellement j'utilise un parser de type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
for (uint8_t a = 0; a < sizeof(donnees); a++) {
 if ((donnees[a] == 1) || (donnees[a] == 3)) {
  //donnees 8b
  a++;
 }
 
 if (donnees[a] == 2) {
  //donnees 16b
  a = a +2;
 }
}
Je m'étais dit que cela serait plus propre d'utiliser des structures :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
struct donnees_8b {
 uint8_t indicatif;
 uint8_t valeur;
}
 
struct donnees_16b {
 uint8_t indicatif;
 uint16_t valeur;
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
switch (donnees[a]) {
 case 1:
 case 3: {
  struct donnees_8b my_struct;
  break;}
 case 2: {
  struct donnees_16b my_struct;
  break;}
 }
}
 
memcpy(&my_struct, &donnees[a], sizeof(my_struct));
Sauf que cela me dit que my_struct n'est pas déclaré. J'ai donc tenté de déclarer avant, mais cela ne me redéfinie par la structure. my_struct reste sur la version 8b :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
struct donnees_8b my_struct;
switch (donnees[a]) {
 case 1:
 case 3: {
  struct donnees_8b my_struct;
  break;}
 case 2: {
  struct donnees_16b my_struct;
  break;}
 }
}
 
memcpy(&my_struct, &donnees[a], sizeof(my_struct));
J'ai cherché et je n'arrive pas à comprendre si c'est parce que mon utilisation de structure est erronnée, à savoir que le compilateur l'utilise de manière static lors de son initialisation ou bien qu'il y a une autre raison ?

Merci d'avance,