IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Comment "éclater" une chaine de char ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 67
    Par défaut Comment "éclater" une chaine de char ?
    Hello,

    voilà mon objectif : Je voudrais monitorer automatiquement l'état (connecté ou non) des postes connecté sur la même plage d'adresse ip d'un client. Exemple :
    J'ai 192.168.1.2, à l'execution de mon programme, j'aimerais d'une récupérer l'ip locale, prendre cette ip et la découper en 4, mettre de côté les 3 premières parties (donc 192, 168 et 1) puis de faire un ping sur toute la plage ip, en partant de 192.168.1.0 à 192.168.1.254.

    J'aurais donc besoin de savoir "découper mon ip en 4", et de la reconsituter en incrémentant à chaque fois le numero du poste (donc 192.168.1.X où X est ce numero) pour procéder à mon test.

    J'ai bien pensé à strpbrk ou strstr, mais non, pas de solution avec ces deux fonctions.

    Auriez vous une idée sur la façon de procéder au découpage de mon ip ?

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Comme tu as une chaine formattee, sscanf() est ton amie.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Par défaut
    Avec sscanf
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int n1,n2,n3,n4;
    sscanf(taChaine,"%d%*[.]%d%*[.]%d%*[.]%d",&n1,&n2,&n3,&n4);
    EDIT : Et grillé...

  4. #4
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 67
    Par défaut
    En fait, j'ai une fonction qui me récupère l'ip du poste. Donc je pars de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char ip[13] = "192.168.1.2" ;
    Et j'aimerais arriver à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int long n1 = "192" ;
    int long n2 = "168" ;
    int long n3 = "1" ;
    int long n4 = "2" ;

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Pourquoi vouloir travailler sur des chaines de caracteres? Travailler avec des entiers est trivial, notamment pour incrementer la derniere valeur. Si tu as besoin d'une IP en chaine de caractere, sprintf() est la pour ca.

  6. #6
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 67
    Par défaut
    Citation Envoyé par DaZumba Voir le message
    Pourquoi vouloir travailler sur des chaines de caracteres? Travailler avec des entiers est trivial, notamment pour incrementer la derniere valeur. Si tu as besoin d'une IP en chaine de caractere, sprintf() est la pour ca.
    Exact pour les int, je vois pas pourquoi je voulais bosser en long int..

    Concernant sprintf(), je m'en sers pour justement réassembler les ip (en incrémentant le dernier int), mais je ne savais pas qu'on pouvait "désassembler" une chaine avec.

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par nuitn0ire Voir le message
    Concernant sprintf(), .... mais je ne savais pas qu'on pouvait "désassembler" une chaine avec.
    Ce n'est pas ce qu'a voulu dire DaZumba qui a effectivement proposé sscanf pour "désassembler" la chaîne et sprintf pour "réassembler"

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Par défaut
    Ca ou alors partir de ta chaine et utiliser le sscanf que Tomy a présenté un peu plus haut

    Sauf que tu ne récupères que la dernière valeur, en t'assurant néanmoins que les autres sont correctes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sscanf(ip, "%*[0-255]%*[.]%*[0-255]%*[.]%*[0-255]%*[.]%d", &n4);
    NB : je ne suis VRAIMENT pas certain de mon format... Je l'ai fait "à vue de nez". C'est juste pour illustrer le principe...

  9. #9
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 67
    Par défaut
    Citation Envoyé par groscask Voir le message
    Ca ou alors partir de ta chaine et utiliser le sscanf que Tomy a présenté un peu plus haut

    Sauf que tu ne récupères que la dernière valeur, en t'assurant néanmoins que les autres sont correctes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sscanf(ip, "%*[0-255]%*[.]%*[0-255]%*[.]%*[0-255]%*[.]%d", &n4);
    NB : je ne suis VRAIMENT pas certain de mon format... Je l'ai fait "à vue de nez". C'est juste pour illustrer le principe...
    Nope, ne marche pas chez moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char ip[16] = "192.168.1.2";
    int n4 = "0";
    sscanf(ip, "%*[0-255]%*[.]%*[0-255]%*[.]%*[0-255]%*[.]%d", &n4);
    printf("%d",n4);

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/05/2008, 18h43
  2. Conversion d'une chaine de char en numerique
    Par simone.51 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 25/03/2004, 16h47
  3. Réponses: 2
    Dernier message: 06/12/2002, 07h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo