有人可以为我解释这段代码吗
Could someone explain this code for me please
我在网上找到了这个凯撒密码加密代码,我想了解它是如何工作的
#include<stdio.h>
int main()
{
char message[100], ch;
int i, key;
printf("Enter a message to encrypt: ");
gets(message);
printf("Enter key: ");
scanf("%d", &key);
for(i = 0; message[i] != '[=10=]'; ++i){
ch = message[i];
if(ch >= 'a' && ch <= 'z'){
ch = ch + key;
if(ch > 'z'){
ch = ch - 'z' + 'a' - 1;
}
message[i] = ch;
}
else if(ch >= 'A' && ch <= 'Z'){
ch = ch + key;
if(ch > 'Z'){
ch = ch - 'Z' + 'A' - 1;
}
message[i] = ch;
}
}
printf("Encrypted message: %s", message);
return 0;
}
if(ch >= 'a' && ch <= 'z')
的含义
比如 c 是否将字母表包含为数组或其他东西,或者它如何知道字母是 b 还是其他字母?
将 int 添加到 ch = ch + key;
中的 char
这个数学东西ch = ch - 'Z' + 'A' - 1;
非常感谢
代码为每个输入的字符添加特定值 (key
),"rotates" 范围内的字符 a-z
如果是小型大写字母,如果是大写字母则为 A-Z
.
在 C 中,每个单个字符都有一个隐含的 ascii/int
值,比较运算符用于确定输入的字符是否在字符集中 a-z
(它们彼此对齐)或者如果它在 A-Z
的集合中,它们也紧随其后。
如果输入的字符加上 key
"overshoots" f.e,其余代码将处理回绕。 z
或 Z
并通过减去 'z'
的值并添加 'a' -1
的值来循环它,以便生成的 char 再次成为 [= 的选定范围内的一个11=] 或 A-Z
我在网上找到了这个凯撒密码加密代码,我想了解它是如何工作的
#include<stdio.h>
int main()
{
char message[100], ch;
int i, key;
printf("Enter a message to encrypt: ");
gets(message);
printf("Enter key: ");
scanf("%d", &key);
for(i = 0; message[i] != '[=10=]'; ++i){
ch = message[i];
if(ch >= 'a' && ch <= 'z'){
ch = ch + key;
if(ch > 'z'){
ch = ch - 'z' + 'a' - 1;
}
message[i] = ch;
}
else if(ch >= 'A' && ch <= 'Z'){
ch = ch + key;
if(ch > 'Z'){
ch = ch - 'Z' + 'A' - 1;
}
message[i] = ch;
}
}
printf("Encrypted message: %s", message);
return 0;
}
if(ch >= 'a' && ch <= 'z')
的含义 比如 c 是否将字母表包含为数组或其他东西,或者它如何知道字母是 b 还是其他字母?将 int 添加到
ch = ch + key;
中的 char
这个数学东西
ch = ch - 'Z' + 'A' - 1;
非常感谢
代码为每个输入的字符添加特定值 (key
),"rotates" 范围内的字符 a-z
如果是小型大写字母,如果是大写字母则为 A-Z
.
在 C 中,每个单个字符都有一个隐含的 ascii/int
值,比较运算符用于确定输入的字符是否在字符集中 a-z
(它们彼此对齐)或者如果它在 A-Z
的集合中,它们也紧随其后。
如果输入的字符加上 key
"overshoots" f.e,其余代码将处理回绕。 z
或 Z
并通过减去 'z'
的值并添加 'a' -1
的值来循环它,以便生成的 char 再次成为 [= 的选定范围内的一个11=] 或 A-Z