Pb chaine de caractère

matthius25 Messages postés 3 Date d'inscription vendredi 18 avril 2003 Statut Membre Dernière intervention 23 juillet 2003 - 23 juil. 2003 à 09:45
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 - 23 juil. 2003 à 17:08
Voici mon problème :
je dois faire communiquer une application C++ avec un programme automate PL7. Cette communication se fait par socket.
Du coté automate quand il reçoit un message, ce dernier est du format suivant :
2 caractères pour la longueur + X caractères pour le message.
du coté C++, j'envoie donc le message suivant :
"\x00\x0D""pouetouvastu?".
\x00 fait un caractère
\x0D fait aussi un caractère, c'est la longueur du message pouetouvastu?.
remarque : du coté automate le programme ne comprend pas les caractères il les reçoit en ASCII, c'est pour ça que je passe par la représentation hexadécimale pour qu'il comprenne qu'il doit recevoir 13 caractères.
si je met "13""pouetouvastu?", l'automate attend un message de 4953 caractères et comme j'en envoie que 5 il bloque (attente de la suite du message).

Comment faire pour automatiser l'envoi coté C++ ?
Je sais récupérer la longueur du message, la transformer en hexadécimal mais le problème se situe à l'insertion dans l'entete ("\x00\x"). La concaténation de l'entete avec la valeur convertie en caractère ne fonctionne pas.

merci de votre aide
a+
Matthius

1 réponse

sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
23 juil. 2003 à 17:08
j'ai un truc a te proposer, c'est un peu un vieux truc indien, mais ca fonctionne super bien :)

#define SWAP(a, b) (((a) ^= (b)), ((b) ^= (a)), ((a) ^= (b)))

void write_to_pl7(char *message)
{
short len;
char buff[512];

len = strlen(message);

memcpy(buff, &len, 2);
SWAP(buff[0], buff[1]);
memcpy(buff + 2, message, len);

// send(fd_socket, buff, len + 2);
}
0
Rejoignez-nous