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 :

Cast casse tete


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 87
    Par défaut Cast casse tete
    Bonjour,
    désolé pour le nom du sujet, je savais pas trop quoi mettre. Voila un code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    typedef    unsigned char        donne;
     
    int main()
    {
           donne *t;
           int j;
     
           // Une fonction remplit la variable t
     
           for (j=0; j<8; j++)
           printf("%02x",t[j]);
     
           return 0;
    }
    A quoi correspond le symbole %02x ?
    Au lieu d'afficher t[0] t[2] ... t[7] j'aimerai rentrer toutes ces valeurs dans une chaine pour ensuite faire des comparaisons, mais je n'y arrive pas.

    Par exemple un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char *chaine;
    chaine = (char *)malloc(50 * sizeof(char));
     
    for (j=0; j<8; j++)
    strcat(chaine,(unsigned char)t[j]);
    Me renvoi une erreur.

    Mon but serait de remplir la variable chaine avec les valeurs du tableau t, pour ensuite faire une comparaison :

    if(strcmp(chaine,"a1b2b3b4a1b2b3b4") == 1)
    printf("Tu as entré la bonne chaine");

    Comment faire ?
    merci de votre aide

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par flo_k
    if(strcmp(chaine,"a1b2b3b4a1b2b3b4") == 1)
    printf("Tu as entré la bonne chaine");
    n'est-ce pas plus simple de faire qqch du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for(i=0;i<7 && t[i]==t2[i];++i);
    if(i==7) printf("erreur\n");

  3. #3
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Si tu veux concatener le resultat d'un sprintf, ça peut se faire de cette maniere
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int cur_lg;
     
    cur_lg = 0;
    for (j=0; j<8; j++)
    {
       cur_lg += sprintf(chaine + cur_lg, "%02x", t[j]);
    }
    /* chaine[cur_lg] = '\0';  j'ai rien dit */
    voilà.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Gruik
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine[cur_lg] = '\0'; /* à ne pas oublier */
    Inutile. sprintf() fait son travail et heureusement !

  5. #5
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Ah oui, c'est vrai je me suis embrouillé avec autre chose

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 87
    Par défaut
    Merci beaucoup
    C'est résolu, la méthode avec sprintf est parfaite,
    j'aurai pu en effet comparer chaque valeur du tableau une a une, mais ca me convenait moins

    J'ai une autre question en passant,

    dans une boucle, qui engloberait le code de gruik,
    suit - je obligé de faire un free(chaine) puis un malloc en fin de boucle, pour créer une chaine vide, et ne pas concatener la chaine précédente avec les nouvelles valeurs ? Un chaine =""; ne semble pas faire l'affaire.

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

Discussions similaires

  1. [Bloqué]Macro autoexec casse tete
    Par torNAdE dans le forum Access
    Réponses: 24
    Dernier message: 12/07/2006, 15h09
  2. Tube nommé: un casse tête
    Par yashiro dans le forum Linux
    Réponses: 2
    Dernier message: 28/06/2006, 09h11
  3. Requete Casse tete... Help..
    Par Jerome218 dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/01/2006, 05h57
  4. casse tete de requete
    Par moutey dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/12/2004, 14h00
  5. [casse-tete (pour moi)] recuperer la largeur d'un <div>
    Par Invité dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 05/11/2004, 07h39

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