凯撒密码加密提供错误的输出

时间:2016-11-28 11:05:35

标签: algorithm arduino caesar-cipher

每当我用键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 个答案:

答案 0 :(得分:1)

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

所以,当你达到最高值127时,就会出现问题..

更改

char ch;

改为:

unsigned char ch;