none
BYTE * et byte array RRS feed

  • Question

  • Bonjour, j'ai un problème qui se présente à moi, je souhaite faire une authentification locale. Pour cela, mon code va récupérer un BYTE * auth et je le compare avec mon identifiant qui est :

    byte test[] =  {0xF6,0x42,0x71,0x84,0x83,0x33};

    Pour comparer et accéder à la fonction, j'utilise un if :

    if ( auth == test )
    {
     // Fonction
    }

    Et le problème, c'est que je sais que mon égalité est exacte mais cela ne fonctionne pas, la fonction ne s'exécute pas.

    Et j'ai d'ailleurs aussi essayé de faire ça 

    byte test[] =  {0xF6,0x42,0x71,0x84,0x83,0x33};
    byte abcd[] =  {0xF6,0x42,0x71,0x84,0x83,0x33};
    
    if ( abcd = test )
    {
     // Fonction
    }

    Et ça ne fonctionnait pas non plus.

    Si il y a des difficultés de compréhension à mon problème, je pourrais réexpliquer plus clairement.
    Merci de bien vouloir m'aider.





    • Modifié Rousselin mercredi 19 mars 2014 20:06
    mercredi 19 mars 2014 20:01

Réponses

  • Problème réglé, j'ai utilisé le code suivant :

    static bool Auth(BYTE * c1, BYTE * c2 )
            {
                for (int i = 0; i < 16; i++)
                {
                    if (c1[i] != c2[i])
                        return false;
                }
                return true;
            }

    • Marqué comme réponse Aurel Bera lundi 24 mars 2014 06:23
    jeudi 20 mars 2014 17:08

Toutes les réponses

  • "==" compare les pointeurs, pas le contenu des tableaux.

    Attention, "=" dans "if(abcd = test)" est une affectation, pas une comparaison.

    Si vous voulez comparer le contenu d'un tableau de byte, il vous faut faire une boucle sur l'ensemble du tableau et comparer le contenu et non le pointeur.


    Paul Bacelar, Ex - MVP VC++

    jeudi 20 mars 2014 02:17
    Modérateur
  • Mon problème justement est comment faire ?
    jeudi 20 mars 2014 16:24
  • Problème réglé, j'ai utilisé le code suivant :

    static bool Auth(BYTE * c1, BYTE * c2 )
            {
                for (int i = 0; i < 16; i++)
                {
                    if (c1[i] != c2[i])
                        return false;
                }
                return true;
            }

    • Marqué comme réponse Aurel Bera lundi 24 mars 2014 06:23
    jeudi 20 mars 2014 17:08
  • En utilisant des types "modernes" par exemple

    std::array<unsigned char,6> test = {0xF6,0x42,0x71,0x84,0x83,0x33};
    std::array<unsigned char,6> test2 = {0xF6,0x42,0x71,0x84,0x83,0x33};
    bool titi = test == test2;

    En utilisant des outils standards, par exemple

    unsigned char test3[] = {0xF6,0x42,0x71,0x84,0x83,0x33};
    unsigned char test4[] = {0xF6,0x42,0x71,0x84,0x83,0x33};
    bool titi2 = test3 == test4; // <- pas bon
    bool titi3 = std::equal(test3,test3+sizeof(test3),test4);//<- La SL est notre amie


    Paul Bacelar, Ex - MVP VC++

    jeudi 20 mars 2014 17:17
    Modérateur