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 :

Comparaison chaines de caractères


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Points : 20
    Points
    20
    Par défaut Comparaison chaines de caractères
    bonjour,
    j'ai un problème j'arrive pas a trouver une solution pour faire une comparaison avec la valeure contenu dans un tableau de char et une chaine de caractère.

    voila une partie de code:
    char buffer[6];

    ifconfig(iface, IFG_HWA, buffer, IFS_END))
    printf(" Hardware address is %02x:%02x:%02x:%02x:%02x:%02x\n",
    buffer[0],buffer[1],buffer[2],
    buffer[3],buffer[4],buffer[5]);

    en faite ca permet d'afficher l'adresse MAC de mon module.
    Moi, ce que je veu faire c'est de comparer par exemple buffer[0] qui contient en faite 2e avec la chaine de caractère 2e, en faite de faire
    if(buffer[0] == "2e")
    printf(" good");

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Il serait temps que tu lises un bon bouquin de C sur les chaînes de caractères, tu confonds allègrement caractères et chaînes de caractères :
    char buffer[6] d&éclare un tableau de 6 caractères.
    Ce tableau peut servir à mémoriser une chaîne de caractères valides si au moins un des caractères est 0.
    Donc ton tableau buffer peut contenir une chaîne valide de 5 caractères au maximum .
    Quand tu dis que buffer[0] contient 2E tu veux dire 0x2E et donc tu dois faire la comparaison
    Si tu voulais eventuellement faire la comparaison avec la chaîne "2E", il faudrait écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (strcmp(buffer, "2E") == 0
    Remarque que j'écris ici buffer et non plus buffer[0], buffer est un tableau de caractères qui peut être interprété en chaîne de caractères, voir plus haut).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    merci
    je me suis peu etre mal exprimé car je suis pas un pro du C

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    en faite plus clairement , dans :
    buffer[0] j'ai 00
    buffer[1] j'ai 90
    buffer[2] j'ai c2
    buffer[3] j'ai cd
    buffer[4] j'ai 07
    buffer[5] j'ai c9
    cela quand je l'affiche avec un printf.... ca me donne 00:90:c2:cd:07:c9 c'est une adresse mac. Ce que je voudrais faire en faite c'est de comparer cette donnée avec une chaine de caractère 00:90:c2:cd:07:c9 et si les deux sont identique alors je met un bit à 1 et si imaginons j'ai une autre chaine 00:94:c8:dd:09:c9 alors je met le bit à 0

  5. #5
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par mmarcoboss
    ca me donne 00:90:c2:cd:07:c9 c'est une adresse mac. Ce que je voudrais faire en faite c'est de comparer cette donnée avec une chaine de caractère 00:90:c2:cd:07:c9 et si les deux sont identique alors je met un bit à 1 et si imaginons j'ai une autre chaine 00:94:c8:dd:09:c9 alors je met le bit à 0
    Utilises la première solution donnée par TRAP D :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int flag = 0;
    if ( (buffer[0] == 0x00)
      && (buffer[1] == 0x90)
      && (buffer[2] == 0xC2)
      ...
      && (buffer[5] == 0xC9) )
    {
        flag = 1;
    }

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par mmarcoboss
    en faite plus clairement , dans :
    buffer[0] j'ai 00
    buffer[1] j'ai 90
    buffer[2] j'ai c2
    buffer[3] j'ai cd
    buffer[4] j'ai 07
    buffer[5] j'ai c9
    cela quand je l'affiche avec un printf.... ca me donne 00:90:c2:cd:07:c9 c'est une adresse mac. Ce que je voudrais faire en faite c'est de comparer cette donnée avec une chaine de caractère 00:90:c2:cd:07:c9 et si les deux sont identique alors je met un bit à 1 et si imaginons j'ai une autre chaine 00:94:c8:dd:09:c9 alors je met le bit à 0
    Il ne faut pas confondre 2 choses. D'une part, tu as le tableau de unsigned char nommé buffer qui contient des données représentant une adresse Mac. Ce n'est pas une chaine de caractères.

    D'autre part, il y a une représentation textuelle de ces données sous la forme d'une chaine de caractères, selon le format suivant :

    "<hex><sep><hex><sep><hex><sep><hex><sep><hex><sep><hex>"

    avec
    hex ::= valeur convertie en hexadécimal sur 2 chiffres avec 0 en tête.
    sep ::= le caractère ':'

    Si tu veux comparer des adresses binaires, tu utilises memcmp() avec buffer, l'autre tableau et une taille de 'sizeof buffer'.

    Si tu veux comparer des chaines de caractères, il faut d'abord convertir le tableau en chaine avec sprintf(). :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       char smac[sizeof "xx:xx:xx:xx:xx:xx"];
       sprintf (smac, "%02X:%02X:%02X:%02X:%02X:%02X"
                , buffer [0]
                , buffer [1]
                , buffer [2]
                , buffer [3]
                , buffer [4]
                , buffer [5]
       );
    et ensuite comparer avec strcmp().

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    oki
    merci ca fonctionne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SetFilter et comparaison chaine de caractère
    Par beubeustand dans le forum JDBC
    Réponses: 3
    Dernier message: 13/07/2011, 14h36
  2. Comparaison chaine de caractère dans deux fichiers différents
    Par ghostrider95 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 09/02/2011, 20h25
  3. Comparaison chaines de caractères
    Par Invité dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/11/2008, 13h56
  4. Réponses: 12
    Dernier message: 08/07/2008, 16h53
  5. comparaison chaines de caractères
    Par tom31 dans le forum C
    Réponses: 1
    Dernier message: 09/02/2008, 10h56

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