如何将整数转换为其ascii等效值

时间:2016-01-23 03:03:17

标签: c++ random char int ascii

首先,我非常清楚还有其他类似的帖子。但无论出于何种原因,我都无法让它发挥作用(#imanoob)。

上下文:我在c ++中使用密码生成器,基本上它使用rand生成数字,这些数字直接对应于ASCII字符。

因此,生成数字很容易,但我需要将其转换为ASCII等价物以实际生成可用的密码。

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main ()
{
    //Initializing variables.
    int type = 0;
    int character = 0;
    char print = character;

    //Generator.
    srand(time(NULL));
    for (int i=0; i<10;i++)
    {
        type = rand()%(3-1+1)+1;//Determines: 1 = Uppercase, 2 = Lowercase, 3 = Number.
        if (type == 1)//If Uppercase.
        {
            character = rand()%(90-65+1)+65;//Determines Uppercase character to be generated.
            cout<<print<<endl;
        }
        if (type == 2)//If Lowercase.
        {
            character = rand()%(122-97+1)+97;//Determine Lowercase character to be generated.
            cout<<print<<endl;
        }
        if (type == 3)//If Numerical.
        {
            character = rand()%(57-48+1)+48;//Determines Number to be generated.
            cout<<print<<endl;
        }
    }
}

在我上面发布的代码中,你可以看到我上次试图公然告诉程序变量&#34;字符&#34;需要用作实际角色。是的,我是愚蠢的。

我可以在这里获得一些见解。如果有一个链接可以提供到这个问题,我会很高兴。我真的不在乎我是否会被遗忘。

好的,似乎有点混乱。 Rand生成一个介于65和90之间的数字。这些数字对应于ASCII表上的大写字母。我想在控制台上打印字母,而不是生成的数字。

2 个答案:

答案 0 :(得分:1)

当你写这个

print

您告诉编译器您希望它将变量character初始化为变量character当前值(当时恰好为零)。如果您希望将当前值设置为不同类型的变量,则需要在重新分配character = rand()%(90-65+1)+65;//Determines Uppercase character to be generated. print = (char)character; cout<<print<<endl; 之后执行此操作:

character = rand()%(90-65+1)+65;//Determines Uppercase character to be generated.
cout<<(char)character<<endl;

但是,您不必进行重新分配,因为在打印之前直接进行投射就足够了:

character = rand()%('Z'-'A'+1)+'A';

注意:虽然可以使用ASCII字符的十进制值,但如果使用字符常量,代码会变得更容易阅读:

{{1}}

答案 1 :(得分:0)

可以尝试替换

cout<<print<<endl;

通过

cout<<(char)character;

然后你会明白你错过了什么。