2016-11-28 42 views
2

每当我输入字符串,例如用键10输入Dizzy,例如输出部分错误。我有这样的===>ns���,而我应该有nsjji凯撒密码加密给出错误的输出

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); 

回答

1

的问题是,z的字符值122.然后添加10,你会得到132 C中的一个char是-128到127(签字),你可能希望它是0-255和那么它必须是未签名的。

所以,当你得到最大的127以上,你得到的问题..

变化

char ch; 

为了这个:

unsigned char ch; 
+0

我已经成功地改变字符为无符号字符和它的作品! – user3346439

+0

完美,很高兴它的工作! – MrApnea