如何解决尝试创建密码时,如何将字符串中的字符更改为整数
我想问的是什么时候您正在编码密码,并且正在要求用户输入。您将如何将字符串中的字符更改为数字,以便将其插入公式中,然后得到另一个字母。
string s = get_string("Plain Text:");
while (s[a] != '\0')
{
if (isalpha(s[a]))
{
for (c = 0,e = strlen(s); c < e; c++)
{
if (isupper(s[a]))
{
printf("C\n");
a++;
}
if (islower(s[a])) // (x=(?+(argv[1][i]))%26) This is the formula,the ? is where im trying to figure out how to change characters into numbers and then back in characters
{
printf("c\n");
a++;
}
}
}
}
'printf'是为了确保代码正确地检查了小写或大写。如果我没记错的话,我需要2个具有不同范围的公式,以便使一个较高而另一个较低,我可以将它们都插入一个密码公式中。我非常确定您也可以不用整个检查它的大写或小写,但是我不太了解如何创建范围或循环,以便无论大小写还是大写字母都始终保持字母顺序。
解决方法
char
类型是8位整数。因此,字符串是8位整数的数组。
因为您提到了一个将c % 26
应用于字符值的公式,所以假设您对此练习仅对ASCII文本感兴趣。如果您关心非ASCII编码,则整个方法将需要更改。通常,您不能对字符串进行逐字节分析。例如,在UTF8中,某些字形将跨越一个字节,而在UTF16中,每个字形至少为两个字节。
大写字母A–Z字符范围为65..90,小写字母a-z字符范围为97..122。因此,在对它们应用算术公式之前,您将希望获得这些值在0..25范围内。
您可以这样做:
- 当
isupper(s[a])
为真时:int c = s[a] - 65;
- 当
islower(s[a])
为真时:int c = s[a] - 97;
然后应用您的公式。
顺便说一句,通常在对char
进行算术运算时,您需要特别注意128到255之间的值,因为char *
不是指向 unsigned 值。对于Unicode字符串,您的某些字形可能每个跨越一个字节以上。但是因为我们只考虑ASCII字符串,所以这不适用于这里。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。