如何获取变量ASCII值并将其用于求和

如何获取变量ASCII值并将其用于求和,c,variables,ascii,C,Variables,Ascii,我正试图为我正在学习的课程编写一个Caesars加密程序,我非常希望字符串中第i个字符的ASCII值添加一个keyk到ASCII值以加密字符串。 我知道要获取字符ASCII码,您需要“a”或任何字母,但如何从字符变量获取它?只需将每个字符视为int,并将k添加到字符: for(i=0;i < strlen();i++;) { postnum = argv[i] - k } 字符被隐式提升为整数。99%的情况下,这是ASCII值,但实现不需要使用ASCII。“a”+3是完全合法的,并提供“

我正试图为我正在学习的课程编写一个Caesars加密程序,我非常希望字符串中第i个字符的ASCII值添加一个keyk到ASCII值以加密字符串。
我知道要获取字符ASCII码,您需要“a”或任何字母,但如何从字符变量获取它?

只需将每个字符视为int,并将k添加到字符:

for(i=0;i < strlen();i++;)
{
postnum = argv[i] - k
}

字符被隐式提升为整数。99%的情况下,这是ASCII值,但实现不需要使用ASCII。“a”+3是完全合法的,并提供“d”。您也可以将字符分配给int,int c='a'@另一个家伙,“a”是一个整数。我知道,但如果我键入:abc,是否有可能得到一个变量ascii数值得一提的是,在这个特殊情况下,凯撒密码,一个额外的步骤,将字母从“z”后面包装回来,但这可能是另一个问题。@jack请不要照样复制粘贴此代码-由于缺少终止NUL字节,它的行为未定义。您也必须添加它。修复了空终止符问题。我觉得让@jack知道如何进行环绕是合适的,更有效的方法是使用fori=0;str[i]!=0; i++。首先,因为你给斯特伦打了很多次电话,所以它会多次查找长度,即使每次的答案都是一样的。其次,对strlen的调用遍历字符串以获得长度。。而且,由于您正在遍历字符串,因此不需要strlen。。你可以自己检查空终止符。这个算法很粗略。如果字符集是ASCII,它将从顶部滚下。如果字符集是Windows-1252,它将落入四个左右的孔中。如果字符集为UTF-8,则会创建无效且无意义的多代码单元序列。一般来说,没有str[i]+k。它只应用于已知有效的范围,因此仅适用于指定的字符集和编码。或者'a'-'z'和'a'-'z',因为C需要它。
 int i, k = 1;
 char *str = "abc";
 char *ctext = malloc(sizeof(char) * (strlen(str) + 1));
 for (i = 0; i < strlen(str); i++) {
      ctext[i] = str[i] + k;
 }
 ctext[i] = '\0';

 printf("%s\n", ctext);
bcd