Bonjour à tous,
Je vais essayer de vous expliquer ce que je cherche à faire, et pourquoi je cherche à le faire.
Actuellement j'utilise sprintf pour transformer des long long int dans une chaine de caractère en séparant les 2 nombres par une virgule.
Seulement le problème est le suivant: si mon long long int contient le nombre "450" par exemple (je sais que cela tient dans un int mais cette variable est amené à contenir des nombres > 4 milliards).
En mettant dans le tableau cela va prendre 3 "cases", donc 3 octets,je peux voir ça avec strlen().
Mais pour mon application je dois savoir si j'ai reçu assez d'informations sur la socket pour pouvoir faire le traitement.
Et pour faire cela je dois avoir la première "case" de mon paquet qui contient la taille du reste des données. Et cette case doit avoir une taille fixe (ne contiendra pas une valeur > a celle que peut contenir un int) de façon à ce que je puisse regarder si la taille des données accessibles sur la socket est au moins supérieurs à cette taille fixe. Si c'est le cas je suis capable de récupérer la taille de ce qui va suivre, et vérifier ensuite que j'ai reçu assez de données pour faire le traitement, sinon j'attends pour revérifier.
D'ailleurs cette fonction sprintf() n'est pas dérangé si je lui met un char tab[3] et que je cherche à mettre dedans un nombre comme "599400", alors qu'il devrait y avoir un débordement du tableau.
Du coup je ne sais vraiment pas quoi faire.
Aujourd'hui ça marche parce que la taille des données envoyées pour l'initialisation est faible donc je les reçois quasi à coup sûr, mais je préfère assurer mes arrières, et de plus j'en aurais besoin pour la suite pour de la messagerie instantanée (on ne peux pas afficher qu'un morceau du message).
EDIT: Ce code ne veut pas fonctionner, mais fonctionne si je met juste un char, mais dans ce cas pas possible de mettre un nombre > 255...
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 char c[2] = static_cast<char[2]>( i );![]()
Partager