我必须制作一个转换器,将消息:mmZ\dxZmx]Zpgy
转换为相应的ASCII号码,使用此公式
if(OriginalChar+Key > 126)
EncryptedChar = 32 + ((OrgiginalChar + Key) - 127);
else
EncryptedChar = (OrginalChar + Key);
这个问题的关键是1到100之间的任何数字,所以我必须尝试使用每个可能的键,直到有意义的消息。
所以任何人都可以告诉我我做错了什么或者指出了我正确的方向
#include <iostream>
#include <cstdlib>
using namespace std;
void converter(char OriginalChar, int Key);
int main()
{
char OriginalChar[16] = ":mmZ\\dxZmx]Zpgy";
int Key;
converter((int)OriginalChar, Key);
system("pause");
return 0;
}
void converter()(char OriginalChar, int Key)
{
char answer;
for (Key = 0; Key <= 100; Key++)
{
if (OriginalChar - Key < 32)
{
answer = (((OriginalChar - Key) + 127) - 32);
}
else
{
answer = (OriginalChar - Key);
}
cout << (char)answer;
}
}
答案 0 :(得分:1)
您的一个问题是您将整个字符数组转换为单个整数。这是非常棘手的事情,因为整数不能包含所有16个字符
看到:
converter((int)OriginalChar, Key);
此外,converter
函数应该做什么?
变量名称表示您正在传递原始字符(加密前),但是,您没有原始字符,而是加密字符。
为什么要传递Key
值的副本,但在for
循环中完全覆盖它?
你想通过引用传递它吗?
编辑1:
也许你想把converter
的调用放在for
循环中:
for (unsigned int i = 0; i < sizeof(OriginalChar); ++i)
{
converter(OriginalChar[i], Key);
}