envoie de la valeur 0x00 en UDP

Bonjour, à tous,
je debute avec arduino et je me retrouve déjà avec un problème que je n'arrive pas à comprendre.
Je désire envoyer une chaine de caractères en UDp avec la librairie UDP, lorsque un des octects à une valeur 0, il n'est pas transmis et l'ensemble des octects suivants ne sont pas envoyés.
par exemple:
je declare une constante:
char z6 []= {0x01,0x05x0x0,0x2f,xff};

puis j'envoie la chaine

Udp.sendPacket( z6, ipsend, 8000);

seuls les 2 premiers octects sont envoyés 0x01 et 0x05 les 3 octects suivants sont ignorés.

merci pour votre aide;

Salut,

C'est normal, la fin d'une chaîne de caractères étant indiquée par la valeur 0. Il faudrait plutôt passer un tableau d'octets (byte) à la méthode Udp.sendPacket plutôt qu'un tableau de caractères (char). Voici un exemple : http://arduino.cc/en/Tutorial/UdpNtpClient

++

merci pour ton aide, mais la methode Udp.sendpacket demande une valeur CHAR
j'ai ce message d'erreur lorsque je remplace par Byte

error: invalid conversion from 'byte*' to 'int'

Pour envoyer ton tableau de byte contrairement à l'envois d'un tableau de char tu dois spécifier la taille du dit tableau ou packet apparement.
Logique avec un string (char[]) facile de connaitre la taille du paquet grace au eof (0), par contre avec un talbeau de byte il faut le spécifier.

Udp.sendPacket( packetBuffer,NTP_PACKET_SIZE,  address, 123); //NTP requests are to port 123

Donc normal qu'il n'accepte pas de byte, je suppose que la compil te propose les solutions de la signature correspondant au char comme il n'y a que trois paramètres?

  uint16_t sendPacket(uint8_t *, uint16_t, uint8_t *, uint16_t); //send a packet to specified peer 
  uint16_t sendPacket(const char[], uint8_t *, uint16_t);  //send a string as a packet to specified peer
/* Send packet contained in buf of length len to peer at specified ip, and port */
/* Use this function to transmit binary data that might contain 0x00 bytes*/
/* This function returns sent data size for success else -1. */
uint16_t UdpClass::sendPacket(uint8_t * buf, uint16_t len,  uint8_t * ip, uint16_t port){
  return sendto(_sock,(const uint8_t *)buf,len,ip,port);
}

/* Send  zero-terminated string str as packet to peer at specified ip, and port */
/* This function returns sent data size for success else -1. */
uint16_t UdpClass::sendPacket(const char str[], uint8_t * ip, uint16_t port){	
  // compute strlen
  const char *s;
  for(s = str; *s; ++s);
  uint16_t len = (s-str);
  // send packet
  return sendto(_sock,(const uint8_t *)str,len,ip,port);
}

for(s = str; *s; ++s); condition d'arrêt, temps que *s est différent de 0 (false)

merci beaucoup, ça marche,
pour aider ceux qui chercheraient voici le code

declarer la chaine :
byte z1[]={0x2F,0x50,0x31,0X2F,0x5A,0x31,0x00,0x00,0x2C,0x66,0x00,0x00,0x63,0x80,0x00,0x00};

envoie de la chaine avec comme second paramètre la longueur de la chaine ( 16)
Udp.sendPacket( z1, 16, ipsend, portsend);