2016-11-28 2 views
2

Chaque fois que j'ai entré une chaîne telle que Dizzy avec la touche 10 par exemple, la sortie est partiellement erronée. J'ai quelque chose comme ça ===>ns��� alors que je devrais avoir nsjji.César Chiffrement Chiffrement donnant une mauvaise sortie

Serial.print("KEY: "); 
Serial.println(k); 

if ((choice[0]=='e') || (choice[0]=='E')){ 

    int i; 
    char ch;           

    for (i=0; str[i] != '\0'; i++){ 

     ch=str[i]; 

     if(ch >= 'a' && ch <= 'z'){ 

      ch=ch+k; 

      if (ch >'z'){ 
       ch=ch-'z'+'a'-1; 
      } 

      str[i]=ch; 
     } 
     else if(ch >='A' && ch <= 'Z'){ 

      ch=ch+k; 

      if (ch > 'Z'){ 
       ch=ch-'Z'+'A'-1; 
      } 
      str[i]=ch; 
     } 
    } 

    Serial.print("encrypt: "); 
    Serial.println(str); 

Répondre

1

Le problème est que z a une valeur de caractère 122. Ensuite, vous ajoutez 10 et vous obtenez 132. char en C -128 à 127 (signé), vous voulez sans doute qu'il soit 0-255 et alors il doit être non signé.

Alors, quand vous obtenez au-dessus du maximum de 127 vous obtenez les problèmes ..

changement

char ch; 

A cette place:

unsigned char ch; 
+0

J'ai réussi à changer char non signé char et ça marche !!!! – user3346439

+0

Parfait, content que ça a marché! – MrApnea