remplissage d'un tableau

Bonjour,

Je suis pas encore au point avec l'utilisation des tableaux en arduino.

J'ai un tableau déclaré comme ceci dans mon code :

uint8_t broadcastAddress[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

Dans mon "Setting" je récupère une String au format : "24:62:ab:c9:70:c0".

Je récupère par la suite chacun des 6 nombres de la chaine du code MAC :

      String Code1 = MyMasterString.substring(0, 2);
      String Code2 = MyMasterString.substring(3, 5);
      String Code3 = MyMasterString.substring(6, 8);
      String Code4 = MyMasterString.substring(9, 11);
      String Code5 = MyMasterString.substring(12, 14);
      String Code6 = MyMasterString.substring(15, 17);

Puis grâce à une autre de mes question sur le forum j'avais réussi a convertir en byte mes 6 codes :

      byte Code1b = strtol(Code1.c_str(), 0, 16);
      byte Code2b = strtol(Code2.c_str(), 0, 16);
      byte Code3b = strtol(Code3.c_str(), 0, 16);
      byte Code4b = strtol(Code4.c_str(), 0, 16);
      byte Code5b = strtol(Code5.c_str(), 0, 16);
      byte Code6b = strtol(Code6.c_str(), 0, 16);

Et maintenant j'aimerais bien ajouter ces valeur dans mon tableau initial pour les utiliser plus tard dans la "loop"

broadcastAddress[] = {Code1b, Code2b, Code3b, Code4b, Code5b, Code6b};

Mais lors de la compilation j'obtiens l'erreur suivante :

expected primary-expression before ']' token

J'ai donc essayé de modifier le code pour ajouter mon adresse dans mon tableau par :

broadcastAddress[0] = {Code1b, Code2b, Code3b, Code4b, Code5b, Code6b};

Afin d'ajouter en position 0 du tableau le nouveau code MAC.

Mais la j'obtiens l'erreur suivante :

cannot convert '<brace-enclosed initializer list>' to 'uint8_t {aka unsigned char}' in assignment

Et la j'avoue ne pas trop trop comprendre comment faire pour obtenir mais 6 codes dans mon tableau broadcastAdress[] ...

J'ai essayé de chercher dans les tutoriels d'utilisation des tableaux en arduino mais j'arrive pas à voir d'où viens l'erreur ...

Merci de votre aide !

Bonjour,

Tout simplement

  broadcastAddress[0] = strtol(Code1.c_str(), 0, 16);
  broadcastAddress[1] = strtol(Code2.c_str(), 0, 16);
  broadcastAddress[2] = strtol(Code3.c_str(), 0, 16);
  broadcastAddress[3] = strtol(Code4.c_str(), 0, 16);
  broadcastAddress[4] = strtol(Code5.c_str(), 0, 16);
  broadcastAddress[5] = strtol(Code6.c_str(), 0, 16);

La notation {...} ne peut être utilisée que pour une initialisation et non une affectation.

Yes ça fonctionne en effet !

Du coup les {} c'est l'init. et après on utilise le tableau "comme" une variable en ajoutant la position de l'index : nom[index] = valeur; tout simplement.

Dans l'init entre {} cela correspond à {index 0, index1, ..., index n} si j'ai bien suivi ?

Merci pour l'aide !

Dans l'init entre {} cela correspond à {index 0, index1, ..., index n} si j'ai bien suivi ?

oui. un tableau commence à l'index 0 et va jusqu'à l'index n-1 si vous avez n éléments dans le tableau.

on peut fournir au compilateur une liste de valeur entre accolades si on veut initialiser le tableau lors de la déclaration du tableau. int monTableau[3] = {10,20,30};

mais pour le faire plus tard il faut le faire élément par élément, on ne peut plus faire ça d'un coup.

int monTableau[3];

...

monTableau[0] = 10;
monTableau[1] = 20;
monTableau[2] = 30;

Eventuellement en utilisant memcpy()

int monTableau[3] = {10,20,30};

  int tmp[3] = {20,30,40};
  memcpy(monTableau, tmp, sizeof(tmp));

Cela peut sembler capillotracté, ou pas, selon les goûts de chacun.

certes, tout est envisageable :slight_smile: