Et merci pour ta réponse hyper rapide.
Je n'ai pas du donner assez de détail dans ma question ou je l'ai peut être mal formulée.
c'est bien monIP que je veux envoyer sous forme de 4 bytes dans la partie data de la trame udp.
C'est donc bien udp.write que je dois utiliser. Je souhaitais juste alléger le code (si c'est possible).
udp.beginPacket(monBroadcast, udpPort);
for (i=0;i<4;i++)
{
udp.write(&monIP[i], 1);
}
udp.endPacket();
error: invalid conversion from 'unsigned char' to 'const uint8_t*'
error: initializing argument 1 of 'virtual size_t EthernetUDP::write(const uint8_t*, size_t)'
Attend ...
Tu utilise :
udp.write(monIP[i]);
ou
udp.write(monIP[i], 1);
Parce que c'est pas du tout la même chose !
La 1er version envoi un octet directement par valeur, la 2ieme version envoi un buffer.
Manisfestement le compilateur utilise la 2iéme version et non la 1er, d'où l'erreur !
Test et tu verras que ça ne marchera pas une fois exécuté
Le fait de passer un pointeur va t'envoyer l'adresse (enfin une partie) du pointeur et non sa valeur.
Test et tu verras que ça ne marchera pas une fois exécuté
Le fait de passer un pointeur va t'envoyer l'adresse (enfin une partie) du pointeur et non sa valeur.
C'est exactement ce que je me disais et j'aurais l'adresse mémoire de la variable mais pas ça valeur.
D’où mon interrogation.
Pac2Kro:
Par contre, je n'ai pas compris pourquoi il fallait mettre un pointeur.
Mais force est de constater que dans la trame UDP, avec ce code, j'ai bien MonIP.
Pac2Kro:
Si personne n'a d'idée sur le sujet, c'est qu'il doit s'agir d'un bug du compilateur!!!
J'ai bien une idée mais j'en suis pas sûr du tout.
&monIP[i]
IPaddress[] est un opérateur de la classe IPaddress = fonction
IPaddress[n] retourne un byte
&IPaddress[n] retourne un pointeur sur le byte retourné par l'opérateur
Je sait pas comment GCC gére ce type de pointeur "temporaire" en interne, mais faut croire que faire un pointeur sur une valeur de retour fonctionne ...