Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1568 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Récupérer les nombres d'une chaine de caractère ???

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Récupérer les nombres d'une chaine de caractère ???

n°2146451
supman33
Posté le 19-06-2012 à 19:06:27  profilanswer
 

Bonjour,
Je récupère par UDP une chaine de caractère composé de réelles séparés par des virgules.
Je voudrais récupérer dans un tableau de double ces chiffres (sans les virgules).
Pour convertir un char en double, je dois utiliser atof (sauf erreur de ma part).
Mon problème est que je n'arrive pas à récupérer et stocker chaque chiffre entre virgules.
 
Par exemple :
- Si je recois par UDP :
maChaineUdp = "23.165313, 2.461, 789.1131323123 etc...";
- Je voudrais avoir :
chiffreRecu[0] = 23.165313;
chiffreRecu[1] = 2.461;
chiffreRecu[2] = 789.1131323123;
etc... ;
 
Comment faire SVP je n'y arrive vraiment pas ?
Merci.

mood
Publicité
Posté le 19-06-2012 à 19:06:27  profilanswer
 

n°2146452
Terminapor
I'll see you rise.
Posté le 19-06-2012 à 19:11:38  profilanswer
 

UDP, tu parles du protocole internet ? Parce que dans ce cas, pourquoi tu n’envoies pas directement tes doubles ?
 
Sinon, ben faut parcourir ta chaine de caractère et découper à chaque ',' en stockant ça dans un tableau de char*.


---------------
Perhaps you don't deserve to breathe
n°2146459
tpierron
Posté le 19-06-2012 à 20:23:08  profilanswer
 

En utilisant sscanf, ça se fait facilement :
 

Code :
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5.     char * maChaineUdp = "23.165313, 2.461, 789.1131323123";
  6.     char * p;
  7.     double chiffreRecu[16];
  8.     int    n, i;
  9.  
  10.     for (p = maChaineUdp, i = 0; sscanf(p, "%lf%n", chiffreRecu + i, &n) >= 1; i ++) {
  11.         p += n; if (*p == ',') p ++;
  12.         // Edit: on vérifie que ça ne déborde pas...
  13.         if (i == sizeof chiffreRecu / sizeof chiffreRecu[0]-1) break;
  14.     }
  15.  
  16.     for (n = 0; n <= i; n ++)
  17.         fprintf(stderr, "chiffreRecu[%d] = %f\n", n, chiffreRecu[n]);
  18.  
  19.     return 0;
  20. }


Message édité par tpierron le 19-06-2012 à 20:27:01
n°2146974
Sve@r
Posté le 24-06-2012 à 22:12:56  profilanswer
 

Terminapor a écrit :

UDP, tu parles du protocole internet ? Parce que dans ce cas, pourquoi tu n’envoies pas directement tes doubles ?


Attention, le codage des doubles peut varier d'une architecture à l'autre. On ne peut pas envoyer des doubles en brut et être assuré qu'ils seront compris de la même façon de l'autre coté...
 

Terminapor a écrit :

Sinon, ben faut parcourir ta chaine de caractère et découper à chaque ',' en stockant ça dans un tableau de char*.


Ce que fait strtok_r()...

Message cité 1 fois
Message édité par Sve@r le 24-06-2012 à 22:14:15
n°2146987
Terminapor
I'll see you rise.
Posté le 25-06-2012 à 00:09:57  profilanswer
 

Sve@r a écrit :


Attention, le codage des doubles peut varier d'une architecture à l'autre. On ne peut pas envoyer des doubles en brut et être assuré qu'ils seront compris de la même façon de l'autre coté...
 


 
Oui, mais normalement c'est possible justement de régler le problème de big/low endian, après je sais pas comment on fait.
 

Sve@r a écrit :


Ce que fait strtok_r()...


Possible, je programme pas en C :D


---------------
Perhaps you don't deserve to breathe
n°2147064
theshockwa​ve
I work at a firm named Koslow
Posté le 25-06-2012 à 17:00:17  profilanswer
 

Terminapor a écrit :


 
Oui, mais normalement c'est possible justement de régler le problème de big/low endian, après je sais pas comment on fait.
 


 
Un proc qui manipule des ints en little endian peut tout à fait avoir son unité de float en big endian, donc en général, oui, c'est plutôt parce que tu ne peux pas directement faire des htonl ou ntohl bêtement.


---------------
last.fm

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Récupérer les nombres d'une chaine de caractère ???

 

Sujets relatifs
Récupérer valeur dir en vbs[RESOLU] sscanf pour récupérer des float
Récupérer tous les noms de fichier dans un dossierremplacer un caractère dans une chaine
Récupérer les méthodes[Web] Recuperer info. par UDP pour etre affichée sur du HTML
Récupérer un ID dynamiquementMacro Excel -> ajouter un caractère dans une cellule
Plus de sujets relatifs à : Récupérer les nombres d'une chaine de caractère ???


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR