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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    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 émérite
    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
    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
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    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 confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 41
    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
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    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
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    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.

+ 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