Comment comparer deux hexa

Bonjour à tous,

Je recois une valeur qui est sauvée dans une variable de type uint8_t

uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];

Je peux l'imprimer ainsi

Serial.print(F("Got: "));
Serial.println((char*)buf);

Je dois comparer cette valeur et j'ai d'abord essayé ceci

if(strstr((char*)buf,"up") == 0)
      {
        Serial.println("Move UP");
      }

Mais je n'ai jamais réussi à imrimer ce que je souhaitait. Alors je ne sais pas si j'utilise mal ma fonction strstr(), mais jsais que buf peut avoir cette valeur

75 70

Si buf est la valeru de "up"

Voici en fait mon code complet qui bug

if(strstr((char*)buf,"up") == 0)
      {
        Serial.println("Move UP");
      }
      else if(strstr((char*)buf,"right") == 0)
      {
        Serial.println("Move Right");
      }
      else if(strstr((char*)buf,"down") == 0)
      {
        Serial.println("Move Down");
      }
      else if(strstr((char*)buf,"left") == 0)
      {
        Serial.println("Move Left");
      }
      else
      {
        Serial.println("Release");
      }

Je pensais que le fait de faire (char*)buf, strstr() allait bien comparer des char, mais rien n'est comparer nin à "left", "right","up","down".

J'aimerais bien savoir alors, comment soit par exemple Convertir "up" en hexa pour le comparer à buf ou alors convertir buf en chaine de caractere pour le comparer à "up".

Et ainsi de suite pour "down","left","rigth".

Voyez vous?

Merciiii!

si buf contient "75 70"

if(strstr((char*) buf, "75 70")==0)

Tout est toujours stocké dans des octets. ”UP” est une cstring, un tableau de 3 octets contenant la valeur de la représentation ASCII de ‘U’, de ‘P’ suivi d’un 0 (noté souvent caractère nul ‘\0’)

On dirait que vous avez une représentation ASCII dans votre tableau. S’il est terminé par un ‘\0’ comme une cstring alors oui strcmp() effectivement va fonctionner (compare les octets jusqu’au ‘\0’).

Si ce sont des données brutes (et que 0 est une valeur autorisée pour des octets ) il vaut mieux utiliser memcmp()

Cf de manière générale les fonctions classiques de stdlib.h et string.h qui sont à connaître

Savez vous exactement ce qui est reçu et comment c’est stocké dans le tableau ? Si ça provient d’un port série ou similaire, Vous pourriez lire mon petit tuto éventuellement

Merciii beaucoup J-M-L!!!
Ca va beaucoup mieux!!!

Théoriquement mes valeur sont terminée par un \0, mais il me semble plus judicieux d’utiliser memcmp() par le fait que je puisse choisir le nombre de caractere a comparer. Théoriquement aussi, il ne devrait pas avoir de zéro à comparer puisqu’il s’agit de comparer up, down, left, right. Mais ce peut changer dans l’avenir…

Merci et bon dimanche!!
…et bonnes fêtes

super - bonne fêtes à vous aussi!

tenez un petit code de test

const char up_cstring[] = "up"; // trois octets, code ASCII de u, de p et'\0'
const uint8_t up_data[] = {'u', 'p'}; // deux octets seulement: code ASCII de 'u', de 'p'

void setup() {
  Serial.begin(115200);
  if (strcmp(up_cstring,"up") == 0) Serial.println("\"up\" vaut bien \"up\" :)");
  if (memcmp(up_data, (uint8_t *) up_cstring, 2) == 0) Serial.println("'u' et 'p' c'est bien les 2 premiers octets de \"up\" :)");
}

void loop() {}

La console devrait vous dire

[sub][color=blue]"up" vaut bien "up" :)
'u' et 'p' c'est bien les 2 premiers octets de "up" :)
[/color][/sub]