Go Down

Topic: Comparaison entre valeur d'un buffer et un string (Read 703 times) previous topic - next topic

arnaudf09

Bonjour,
Je ne parviens pas à comparer la valeur d'un string avec celle d'un buffer, j'utilise le code suivant, pouvez vous y jeter un œil et me dire ou je me trompe...
Merci d'avance


Je récupère mon buffer (qui provient d'une carte lan ENC28J60 avec la librairie UIPEthernet de la manière suivante:


Code: [Select]

              uint8_t* msg = (uint8_t*)malloc(size);
              size = client.read(msg,size);




j'arrive à l'afficher sur le serial de 2 manières:

1ere manière, qui fonctionne:

Code: [Select]


              Serial.write(msg,size);


2eme manière, qui fonctionne aussi:


Code: [Select]

              MsgString = msg;
              Serial.print(MsgString);



le resultat est le meme pour les 2:
ERROR|NOT LOGGED
ERROR|NOT LOGGED

Par contre, je ne parviens pas à faire de if ou d'autre conditions logiques dessus...

La, si j'utilise le code suivant, cela ne fonctionne pas... ???
Code: [Select]


    if (MsgString = String("ERROR|NOT LOGGED"))
      {
        Serial.print("ERROR NOT LOGGED");
        Serial.println(); 
      } // Fin du if (MsgString = String("ERROR|NOT LOGGED"))   

   
    if (MsgString = String("ERROR|BAD PASSWORD"))
      {
        Serial.print("ERROR BAD PASSWORD");
        Serial.println(); 
      } // Fin du if (MsgString = String("ERROR|BAD PASSWORD"))






je n'ai aucun retour sur le moniteur série... ???

Avez vous une idée d'où je peux me planter ???

Merci

lesept

A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

arnaudf09

Bjr, oui je viens de m'en rendre compte mais à priori ca ne viens pas de ca...
Je traite sur un autre forum, une partie de mon probleme, si tu veux y jeter un oeil, à priori une erreur de
msg est un pointeur sur un buffet que tu as reservé
"ERROR|BAD PASSWORD" ( ou "HELLO", etc) est un pointeur sur une chaine de caractères quelque part dans la mémoire, là où le programme conserve ces chaines constantes.
Donc msg ne peut jamais être égal à "ERROR|BAD PASSWORD" ou à "HELLO" ou etc..
Pour comparer 2 chaines de caractères, il faut utiliser la fonction strcmp()

https://forum.arduino.cc/index.php?topic=535110.new#new


_pepe_

#3
Mar 16, 2018, 04:24 pm Last Edit: Aug 19, 2018, 03:03 am by _pepe_
Supprimé

arnaudf09

meme avec strcmp, ca marche pas...

Code: [Select]



// Compare string1 à string2 et retourne 0 si egal
    if (strcmp(msg,"ERROR|NOT LOGGED") == 0)
    {
        Serial.print("ERROR NOT LOGGED");
        Serial.println();
    }


arnaudf09

ca ne fonctionne pas non plus, toujours rien d'affiché sur le moniteur serie

Code: [Select]



// Compare string1 à string2 et retourne 0 si egal
    if (strncmp(msg,"ERROR|NOT LOGGED",size) == 0)
    {
        Serial.print("ERROR NOT LOGGED");
        Serial.println();
    }


_pepe_

#6
Mar 16, 2018, 04:36 pm Last Edit: Aug 19, 2018, 03:03 am by _pepe_
Supprimé

_pepe_

#7
Mar 16, 2018, 04:44 pm Last Edit: Aug 19, 2018, 03:03 am by _pepe_
Supprimé

arnaudf09

resultat:

18 : E=45 R=52 R=52 O=4F R=52 |=7C N=4E O=4F T=54  =20 L=4C O=4F G=47 G=47 E=45 D=44
=D
=A

arnaudf09

maintenant comment comparer chaque valeur au string recherché ???

lesept

Il y a donc 2 caractères en fin de chaîne : un CR (code D : Carriage Return) et un LF (code A : Line Feed). il faudrait faire le strncmp sur les 16 premier caractères
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

arnaudf09

Bien vu, maintenant cela fonctionne avec le code suivant:

Code: [Select]


// Compare string1 à string2 et retourne 0 si egal
// size - 2 car CRLF donc 2 caractères à la fin du string
    if (strncmp(msg,"ERROR|NOT LOGGED",(size-2)) == 0)
    {
        Serial.print("ERROR NOT LOGGED");
        Serial.println();
    }



Merci pour votre aide...

Une autre question concernant ce fameux CRLF, je dois dans cette meme application envoyer des données du style suivant et je voudrais justement ajouter le CR et le LF à ma commande...



Code: [Select]



          client.println("HELLO|A2S|1234"); // Envoyé la demande de connexion





et je voudrais envoyer le CRLF avec, comment m'y prendre ???

_pepe_

#12
Mar 16, 2018, 06:09 pm Last Edit: Aug 19, 2018, 03:03 am by _pepe_
Supprimé

_pepe_

#13
Mar 16, 2018, 06:16 pm Last Edit: Aug 19, 2018, 03:03 am by _pepe_
Supprimé

arnaudf09

Merci à tous, ça fonctionne nickel...

Je me heutre à un autre probleme que je decris dans ce topic, pour les PRO, pouvez vous encore m'aider un peut ???

Merci d'avance

https://forum.arduino.cc/index.php?topic=535110.new#new


Go Up