initialisation de structure "à la volée" pour une variable unique
Bonjour,
J'ai une array en format 8b avec des données de différents formats suivant un indicatif :
Code:
1 2
|
uint8_t donnees[] = {1, 50, 2, 60, 125, 1, 72, 3, 80}; |
Actuellement j'utilise un parser de type :
Code:
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:
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:
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:
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,