凯撒密码加密给出错误的输出

Caesar Cipher Encryption giving wrong output

每当我使用键 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] != '[=10=]'; 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);

问题是 z 的字符值为 122。然后你加上 10 得到 132。 C 中的 char 是 -128 到 127(有符号),你可能希望它是 0-255 然后它必须是无符号的。

所以当你超过最大值 127 时,你就会遇到问题..

改变

char ch;

改为:

unsigned char ch;