J'essaye d'envoyer un double via un UDP winsock en utilisant la fonction Sendto mais d'abord j'ai besoin de le convertir en char []. Après avoir essayé plusieurs approches, la meilleure chose que je suis venu avec est la suivante:Convertir double en tableau de caractères sans remplissage en C++
// send
memset(buf, '\0', BUFLEN);
double a = position.y();
char arr[sizeof(a)];
cout << "double" << a << endl;
ToString(arr, sizeof(a), a);
sendto(s, arr, strlen(arr), 0, (struct sockaddr *) &si_other, slen);
cout << "Send" << arr << endl;
Cela donne malheureusement un rembourrage de fuite bizarre qui ruine l'opération d'envoi. Des idées sur la façon de résoudre cela?
Ma fonction ToString est la suivante:
void ToString(char * outStr, int length, double val)
{
_snprintf(outStr, length, "%f", val);
}
La sortie ressemble à ceci:
double 0.003
Send 0.003(a bunch of gibberish)
ma suggestion est que vous vérifiez simplement que sizeof double est de 8 à la réception et à l'envoi et que vous l'envoyez simplement en format binaire. – NoSenseEtAl
N'utilisez pas de pointeurs de caractères ou de tableaux de caractères, utilisez std :: string et éventuellement std :: stringstream. –
@NoSenseEtAl Les flottants de format binaire ne sont pas toujours portables. – Galik