-9

我必须制作一个转换器,将消息 :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;
    }
}
4

1 回答 1

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);
}
于 2013-04-18T00:37:38.977 回答