Fonction socket : sendto(...) [Windows] - C++ - Programmation
Marsh Posté le 05-08-2003 à 16:24:08
bon j'ai trouve (ji pense jamais a ces fonctions de conversion ):
char *_ltoa( long value, char *string, int radix );
...mais mon buffer est un tableau du style :
long *buffer = new long [1000]
je dois donc faire 1000 iterations ? je ne pe pas envoyer d'un coup l'& du tableau et la taille
En fait (juste pour savoir comment ca marche), ca me renvoie un tableau de 4 char et mon char * (passe en parametre) pointe sur la 1ere case. non ?
Marsh Posté le 05-08-2003 à 16:27:43
Bah tu convertis en string..
Ça doit être un truc comme ça sous VC6 :
CString str;
str.Format("%d", tonEntier);
sento(..str.c_str()..)
Marsh Posté le 05-08-2003 à 16:30:15
*Syl* a écrit : Bah tu convertis en string.. |
J'ai oublie de preciser mais c une appli dos. avec seulement des bon vieux <stdio.h> etc... dc CString je prefere pas utilise puis j'en ai pas besoin pour mon appli
Marsh Posté le 05-08-2003 à 16:50:16
J'comprends pas là, tu parles de VC6 puis de DOS
Si tu veux pas de CString, passe par la classe string de la STL et sors pas des vieilles fonctions C sur ce forum, Taz risquerait de piquer une crise
Marsh Posté le 05-08-2003 à 17:19:34
sendto(...., (void*)buffer, ..) ca suffit, a toi de l autre cote de faire un. Les fonctions send/recv prenne un char* mais pas ds le sens chaine de caractere, mais buffer d'octet (le char etant generalement = 1 octet)
Code :
|
Marsh Posté le 05-08-2003 à 17:39:55
Citation : 6.5.3.4 The sizeof operator |
?
Marsh Posté le 05-08-2003 à 17:40:08
VisualC++ a écrit : sendto(...., (void*)buffer, ..) ca suffit, a toi de l autre cote de faire un. Les fonctions send/recv prenne un char* mais pas ds le sens chaine de caractere, mais buffer d'octet (le char etant generalement = 1 octet)
|
alors leur char* dans le prototype n'est qu'un simple void*
...t vraiment sur de ton coup ?? (pkoi ils disent char* c blairo ! void * c tellement plus simple )
Marsh Posté le 05-08-2003 à 17:41:26
*Syl* a écrit :
|
maitenant relis
Marsh Posté le 05-08-2003 à 17:42:49
Oui jsuis sur, le pkoi du char* plutot que void* doit etre historique mais aucune idee et franchement depuis le temsp je me pose mm plus la question, (void*)myBuffer tout le temps et c portable de partout.
Edit : par contre non char* c pas un typedef de void*
Marsh Posté le 05-08-2003 à 17:51:13
Taz a écrit : |
V'la comment j'traduis ça :
Citation : C'est fondamental pour l'usage correct des fonctions telles que malloc et fread que sizeof(char) vaille 1. En pratique, ça signifie qu'un octet dans les termes du C est la plus petite unité de stockage, même si cette unité fais 36 bits; et que tous les objets sont composés d'un nombe entier de ces plus petites unités. |
Ils disent bien que sizeof(char) == 1, après je pense que j'ai pas dû saisir leur histoire de 36 bits si tu me dis
Marsh Posté le 05-08-2003 à 17:53:35
re quoted...
byte ne doit pas etre traduit ou alors sous le terme multiplet. son sens est donné par la phrase -> plus petite unité adressable
Marsh Posté le 05-08-2003 à 18:01:34
Ok, j'ai compris leur truc mais dans tous les cas sizeof(char) == 1 même si 1 char = 36 bits, j'me trompe ?
Marsh Posté le 05-08-2003 à 18:02:53
oui. un char est codés sur CHAR_BIT
je me souviens plus mais sur un certain processeur, ça va jusqu'à 32 bits. apres de 10 et des 16 ça se trouve
Marsh Posté le 05-08-2003 à 18:04:26
VisualC++ a écrit : Oui jsuis sur, le pkoi du char* plutot que void* doit etre historique mais aucune idee et franchement depuis le temsp je me pose mm plus la question, (void*)myBuffer tout le temps et c portable de partout. |
erreur de contruction :
Code :
|
t tjs sur de ton coup ?
mon code :
Code :
|
et sans le castage en void* j'ai le msg :
Code :
|
Marsh Posté le 05-08-2003 à 18:06:01
tu as le droit de mettre (void*) & buffer
et oui jsuis toujours sur
Marsh Posté le 05-08-2003 à 18:09:06
VisualC++ a écrit : tu as le droit de mettre (void*) & buffer |
desole pour ma betise (le & ) mais ca marche tjs pas
Code :
|
error :
Code :
|
Marsh Posté le 05-08-2003 à 18:09:09
Taz a écrit : oui. un char est codés sur CHAR_BIT |
Ok, merci d'avoir éclairé ma lanterne
Marsh Posté le 05-08-2003 à 18:12:53
giz a écrit :
|
ben tu peux le forcer a faire un (char*)&buffer alors ca passera
Edit : et si tu dis que ca marche pas jete ton compilo j ai un code sous les yeux avec (char*)&sSocket (sSocket etant une user def structure) et ca compile sans warning sous VS.Net sous XP et 2K, et sous gcc 3.2 et 3.3 sous Solaris.
Marsh Posté le 05-08-2003 à 18:24:48
VisualC++ a écrit : |
Si ca marche...mais franchement je suis douteux de ton coup
Pour la taille du buffer a envoye, je specifie koi alors ?
buffer.bufSize * sizeof(long) pour indiquer la quantite de char a envoyer
- ou bien -
buffer.bufSize pour indiquer la quantite de long a envoyer.
PS : la fonction receive, recoit les donnee ds un buffer (tableau de char)...comment voudras tu que je recupere mon long moi ?
EDIT: faut bien s'appeler microsoft pour typer les donnees que l'on doit envoyer ... un void * ne genait en rien
Marsh Posté le 05-08-2003 à 18:55:23
C'est pour te prevenir que seul les "char" peuvent s'envoyer en reseau sans risque de compatibilité. Une histoire de big endian et de little endian.
Marsh Posté le 05-08-2003 à 19:02:06
giz a écrit : |
T envoi la tailel en OCTET de ton buffer c tout.
Et sendto et consort c pas crosoft
Ben pour la reception de la mm maniere lol, recvfrom(...., (char*)&tontableudelong, ...)
Marsh Posté le 05-08-2003 à 19:33:06
VisualC++ a écrit : le char etant generalement = 1 octet |
Pour info, je viens de me casser le cul 3 semaine à faire des Wrappeur d'api pour l'Unicode alors je peux t'assurrer que c'est vraiment pas toujours vrai ;-)
Marsh Posté le 05-08-2003 à 19:57:38
j'ai presque envie de m'énerver tellement vous êtes gonflant avec votre compilo à 2 euros àlac..
ta réponse ça serait pas...
buffer.data, buffer.datasize*sizeof(long) ?
et arretez avec tous ces casts inutiles... la seule chose que fait un cast C, c'est une convertion binaire incoditionelle qqui revient à dire au compilo 'FERME TA GUEULE'
Marsh Posté le 05-08-2003 à 21:16:22
Kyle_Katarn a écrit : |
J ai bien dit generalement (j ai le mm soucis entre 32 et 64 bits actuellement )
Taz > pe ds l absolu jsuis d acc mais bon mm gcc geule donc tu sais les trucs "standard" c bien en theorie, en pratique c autre chose (enfin la il geule sous sunos pas sous windows)
Marsh Posté le 06-08-2003 à 11:16:58
puis les fonctions generiques ne sont exploitables qu'avec des cast !...donc ca sert les cast
Marsh Posté le 05-08-2003 à 16:18:55
Voila (DarkLord ), j'utilise la fonction sendto de VC++6 sous win98 pour envoyer des packets (via UDP) de prototype :
Code :
int sendto (
SOCKET s,
const char FAR * buf,
int len,
int flags,
const struct sockaddr FAR * to,
int tolen
);
Le bleme c que moi mon buffer (const char FAR * buf) qui pointe sur les donnees a envoyer, pointe sur un long. Ce sont bien des chiffres que je dois envoyer pas des char . Vous feriez comment ?
Message édité par Giz le 05-08-2003 à 16:21:27