2016-11-28 12 views
2

例えばDizzyのような文字列をキー10で入力すると、出力が部分的に間違っています。私はこのようなものを持っています===>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を追加し、(署名)Cのcharは、-128〜127です132 を得るということです、あなたはおそらく、それは0〜255になりたいと署名されていなければなりません。代わりに、これに

ですから、127の最大値を超える取得する際に問題が発生し得る。..

変更

char ch; 

unsigned char ch; 
+0

私は符号なしに文字を変更することができましたチャーとそれは動作します!!!! – user3346439

+0

完璧、それはうれしい! – MrApnea

関連する問題