凯撒密码加密给出错误的输出
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;
每当我使用键 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;