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 :

Trouver 03 valeurs hexadécimales dans un tableau


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut Trouver 03 valeurs hexadécimales dans un tableau
    Bonsoir ,


    je souhaite chercher 03 valeurs héxadecimales prédéfinies dans un tableau pour , ensuite les afficher sur l’écran, j'ai crée un code mais ce dernier, n'est pas correct .


    tableau dans lequel on cherche les valeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    unsigned char tab_données[48] =
     {
     0x7A, 0x23, 0x0A, 0x0E, 0x1F, 0xB4, 0x09, 
     0xCD, 0x21, 0xB8, 0x01, 0x4C, 0xCD, 0x07, 
     0x37, 0x19,0x54, 0xB9, 0x79, 0x6C, 0x20, 
     0xB9, 0x73, 0x6F, 0x30, 0x72, 0x81, 0x9D,
     0x20, 0x1D, 0x97, 0xE1,0x72, 0x21, 0x62,
     0x45, 0x47, 0xC9, 0x75, 0x7B, 0x41, 0x81,
     0x6E, 0x05, 0x35, 0x72, 0x21, 0xA3
    };


    code utiliser

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    int trouver_valeur(const int tab[], int val1 ,  int val2  ,int val3 , int size_tableau)
     {
         int j;
         int resultat =0;
     
     
     
         for ( j = 0; j < size_tableau; j++)
         {
             if ( tab[j] == val1 && val2 && val3 )
              {
               resultat = 1;// valeurs trouvées dans la tableau
               return j;
     
              if(!val1 && val2 && val3) 
              {
               resultat =0;
               printf("valeurs non trouvées ! ");
     
              } //fin condition if valeurs non trouvées
     
     
              } //fin condition if valeurs trouvées
     
     
         } // fin de la boucle qui parcoure tab
     
     
     
     
     
     
     return retval; // retourne 1 , if valeurs trouvées , retourne 0 if Non
     
     }
    Je souhaite chercher les valeurs hexadécimales dans la tableau qui sont
    B9, 79 , 6C et les affichier sur l'écran, j'appelle la fonction de la maniére suivante :
    trouver_valeur (tab_données, 0xB9 ,0x79,0x6C,sizeof(tab_données) );

    Ce code cherche et affiche bel et bien les données dans la tableau , mais le problème c'est qu'il continue à afficher ces valeurs hexa méme si elles ne figurent pas dans la tableau.

    Merci pour toute suggestion .

  2. #2
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (( tab[j] == val1) |( tab[j] == val2) |( tab[j] == val3) )

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Montor Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (( tab[j] == val1) |( tab[j] == val2) |( tab[j] == val3) )

    Salut Mentor ,


    Merci , j'avais essayé ce code, mais ce dernier afficher les valeurs demandées sans que celles ci soient présentes dans la tableau.

    En changeant les valeurs du tableau par 0xB1, 0x19, 0x1C.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    unsigned char tab_donnees[48] =
     {
     0x7A, 0x23, 0x0A, 0x0E, 0x1F, 0xB4, 0x09,
     0xCD, 0x21, 0xB8, 0x01, 0x4C, 0xCD, 0x07,
     0x37, 0x19,0x54, 0xB1, 0x19, 0x1C, 0x20,
     0xB2, 0x73, 0x6F, 0x30, 0x72, 0x81, 0x9D,
     0x20, 0x1D, 0x97, 0xE1,0x72, 0x21, 0x62,
     0x45, 0x47, 0xC9, 0x75, 0x7B, 0x41, 0x81,
     0x6E, 0x05, 0x35, 0x72, 0x21, 0xA3
    };


    On obtient ce résultat à l'écran : valeurs trouvées B9 79 6C.
    Alors que c'est faux.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 41
    Points : 53
    Points
    53
    Par défaut
    Juste pour mieux comprendre, les valeurs recherchées dans le tableau doivent elles être absolument à des indices successifs ? je suppose ...

    Dans ton code, on ne vois nulle part une instruction d'affichage des entiers trouvés ... donc, difficile de juger si ces instructions sont correctes ou pas.

    la ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( tab[j] == val1 && val2 && val3 )
    ne fait certainement pas ce que tu veux, en fait, elle exécute tab[j] == val1 qui retourne résultat booléen : 0, auquel cas on ne rentrera pas dans ton if ou 1 auquel cas on rentrera si et seulement si val2 ET val3 sont non nul. En tenant compte de la priorité des opérateurs en C, cette instruction est équivalente à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ((tab[j] == val1) && (val2 != 0) && (val3 != 0))
    Je me doute bien que ce n'est pas ce que tu veux tester...
    En supposant que les valeurs recherchées dans le tableau doivent être successives : je te propose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if((tab[j] == val1) && (tab[j+1] == val2) && (tab[j+3] == val3))
              return j;
    mais il faudra penser à parcourir ton tableau jusqu'à size_tableau - 3 (inclu), pour ne pas le déborder

    et tout à la fin :

    d'où sort retval ??

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut
    Salut Ulrik18,
    Merci pour tes suggestions.

    Je me doute bien que ce n'est pas ce que tu veux tester...
    En supposant que les valeurs recherchées dans le tableau doivent être successives
    Oui , elles se suivent et sont successives , valeur +valeur+valeur.
    Je voulais écrire , si resultat 1 return vrai , si resultat 0 , return valeurs non trouvées dans la tableau.
    Je vais essayer le code que tu avais proposer et afficher le résultat .

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut
    Re , je viens d'essayer le code en changeant les données recherchées , mais ça affiche toujours les valeurs malgrés qu'elles ne sont pas présentes dans la tableau .


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    unsigned char tab[48] =
     {
     0x7A, 0x23, 0x0A, 0x0E, 0x1F, 0xB4, 0x09,
     0xCD, 0x21, 0xB8, 0x01, 0x4C, 0xCD, 0x07,
     0x37, 0x19,0x54, 0xB1, 0x19, 0x1C, 0x20,
     0xB2, 0x73, 0x6F, 0x30, 0x72, 0x81, 0x9D,
     0x20, 0x1D, 0x97, 0xE1,0x72, 0x21, 0x62,
     0x45, 0x47, 0xC9, 0x75, 0x7B, 0x41, 0x81,
     0x6E, 0x05, 0x35, 0x72, 0x21, 0xA3
    };
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    int trouver_valeur(const int tab[], int val1 , int val2, int val3 , int size_tableau)
     {
         int j;
         int resultat =0;
         for ( j = 0; j < size_tableau;j++)
         {
     
          if((tab[j] == val1) && (tab[j+1] == val2) && (tab[j+3] == val3))
     
              {
     
     
               return j;
               resultat = 1;
     
     
     
              }
     
     
     
     
         }
     
          if ((tab[j] == val1) && (val2 != 0) && (val3 != 0) )
          {
          resultat = 0;
           printf(" valeurs NON trouvées dans la tab :\n");
          }
     
       printf("\n Valeurs trouvees : %02X %02X %02X \n" , val1, val2, val3);
     
     
     
         return resultat;
     }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      trouver_valeur(tab, 0xB9 ,0x79,0x6C,sizeof(tab) );
    Affiche B9 79 6C , malgré que ces données n'existent pas dans la tableau.
    ça parrait si simple , mais ça ne l'est pas autant.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 41
    Points : 53
    Points
    53
    Par défaut
    Je vois que ta fonction doit retourner 1 si les valeurs sont dans le tableau et 0 sinon. (c'est bien ça ?)

    Surveille bien tes types de données. Tu déclares ton tableau en "unsigned char"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    unsigned char tab[48] =
     {
     0x7A, 0x23, 0x0A, 0x0E, 0x1F, 0xB4, 0x09,
    ...
    mais tu le passes à une fonction qui attends en premier paramètre un "const int tab[]". C'est très différent. il vaudrait mieux que les types soient les mêmes. idem pour les paramètres val1, val2 et val3

    En plus pour l'algo de recherche c'est un peu touffu... je te suggère de faire ceci :

    déclares une variable j (comme tu l'as fait),
    parcours ton tableau à l'aide de j, allant de 0 jusqu'à size_tableau-3 (inclu).
    dans ta boucle fait juste le test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if((tab[j] == val1) && (tab[j+1] == val2) && (tab[j+2] == val3))
    s'il est vrai, c'est à dire que les trois valeurs sont à des indices successifs dans le tableau, tu affiches tes valeurs avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("\n Valeurs trouvees : %02X %02X %02X \n" , val1, val2, val3);
    et ensuite tu retournes 1 (pour mettre fin à la fonction vu que tu as trouvé les valeurs. 1 pour vrai). tu fermes le if et la boucle.

    Et lorsque en fin de fonction, si tu n'as rien trouvé, tu retournes 0.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut
    Re Ulrik ,
    Merci .
    il vaudrait mieux que les types soient les mêmes. idem pour les paramètres val1, val2 et val3
    Oui en effet ,je viens de changer ça .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    trouver_valeur(unsigned char tab[], unsigned char  val1 ,unsigned char  val2, unsigned char  val3 , int size_tableau)
    s'il est vrai, c'est à dire que les trois valeurs sont à des indices successifs
    C'est fait .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((tab[j] == val1) && (tab[j+1] == val2) && (tab[j+2] == val3))
    et ensuite tu retournes 1 (pour mettre fin à la fonction vu que tu as trouvé les valeurs. 1 pour vrai). tu fermes le if et la boucle.
    J'ai corrigé ça.Voici la fonction ajournée mais ça affiche toujours les valeurs demandées sans que celles ci soient présentes dans la tableau.
    Essaies toi méme et tu verras le résultat final qui sera faux.
    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
    17
    18
    19
    20
    21
    22
    23
    24
    int trouver_valeur(unsigned char tab[], unsigned char  val1 ,unsigned char  val2, unsigned char  val3 , int size_tableau)
     {
         int j;
         int resultat =0;
         for ( j = 0; j < size_tableau;j++)
         {
     
          if((tab[j] == val1) && (tab[j+1] == val2) && (tab[j+3] == val3))
           {
     
               resultat =1;// valeurs trouvées
             printf("\n Valeurs trouvees : %02X %02X %02X \n" , val1, val2, val3);
        }
     
            if ((tab[j] == val1) && (val2 != 0) && (val3 != 0) )
          {
              resultat = 0;// retournes faux valeurs ne sont pas trouvées
              printf("valeurs non trouvées dans la tableau! ");
          }
     
     
         }// fin de la boucle
         return  resultat; // if vrai affiche données , if faux printf("valeurs non trouvées!");
     }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    trouver_valeur(tab , 0xB9 ,0x79,0x6C,sizeof(tab) );
    le résultat est toujours faux (affiche des valeurs qui ne sont pas dans le tab).
    Merci pour toute autre suggestion.

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 41
    Points : 53
    Points
    53
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     if ((tab[j] == val1) && (val2 != 0) && (val3 != 0) )
          {
              resultat = 0;// retournes faux valeurs ne sont pas trouvées
              printf("valeurs non trouvées dans la tableau! ");
          }
    Cette partie là n'est pas du tout utile.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if((tab[j] == val1) && (tab[j+1] == val2) && (tab[j+3] == val3))
    correction en tab[j+2], dans la dernière comparaison...

    pourquoi utilise tu une variable résultat ? fait directement un retour de la valeur 0 ou 1... (pas une affectation de 1 à résultat ...)

    Ok, voilà une fonction qui devrait normalement fonctionner :

    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
     
    int trouver_valeur(const unsigned char tab[], unsigned char val1 , unsigned char val2, unsigned char val3 , int size_tableau)
     {
         int j;
     
         for ( j = 0; j < (size_tableau - 3);j++)
         {
            if((tab[j] == val1)&& (tab[j+1] == val2) && (tab[j+2] == val3))
            {
                printf("\n Valeurs trouvees : %02X %02X %02X \n" , val1, val2, val3);
                return 1;
            }
         }
     
         return 0;
     }

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut
    Re Ulrik ,
    Merci.

    Cette partie là n'est pas du tout utile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if((tab[j] == val1) && (tab[j+1] == val2) && (tab[j+3] == val3))
    correction en tab[j+2], dans la dernière comparaison...[/CODE]
    Tu me l'avais conseiller je l'avais tester et essayer , tout simplement.
    en tab[j+2] en effet ça semble mieux .


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    voilà une fonction qui devrait normalement fonctionner.
    Oui Ulrik , on pourras ajouter à celle ci un return 0 si les valeurs n'ont pas été retrouvées .


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        if ((tab[j] != val1) && (tab[j] !=val2 ) && (tab[j] != val3  ))
          {
             return 0;
     
          }
    tab[j] == val1) c'est la valeur .B9
    tab[j+1] on incrémente de +1 c'est la valeur 79.
    (tab[j+2] on incrémente de +2 de la valeur de départ B9 + 2 = 6C.
    j = B9 , j+1 = 79 , j+2 = 6C.
    Resultat B9 79 6C.

    Fonction corrécte , résultat OK.
    Merci beaucoup Ulrik , problème résolu .
    Je te souhaite une belle nuit.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/05/2010, 17h30
  2. [Tableaux] Valeur unique dans un tableau
    Par glsn dans le forum Langage
    Réponses: 6
    Dernier message: 06/12/2006, 11h18
  3. [C# 2.0] Conversion hexadécimale dans un tableau de byte[]
    Par cyllix dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/08/2006, 12h29
  4. recherche de valeur identique dans un tableau
    Par jean tof dans le forum Langage
    Réponses: 9
    Dernier message: 20/06/2006, 13h33
  5. 2 valeurs distincts dans un tableau à 2 dimensions...
    Par toyyo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/08/2005, 16h00

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