【问题标题】:How to convert an integer to its ascii equivalent如何将整数转换为其 ascii 等价物
【发布时间】:2016-04-29 18:53:11
【问题描述】:

首先,我非常清楚还有其他类似的帖子。但是,无论出于何种原因,我都无法让它工作(#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;
        }
    }
}

在我上面发布的代码中,您可以看到我上次尝试公然告诉程序变量“字符”需要用作实际字符。是的,我很愚蠢。

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

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

【问题讨论】:

  • 尝试使用映射表。
  • 您将随机值分配给变量character,但您打印的是变量print。开头的赋值print = character 仅将print 设置为character 在代码中该点的值,即0。稍后更改character 不会更新print。这是关于计算机程序的一个非常基本的事实。
  • 顺便说一句,你还没有真正解释你的问题是什么......
  • 问题不清楚。 “ASCII 等价物”?你能举一个你正在尝试做的转换的例子吗?要将103 转换为“103”(char[]std::string?),还是将65 转换为“A”,还是什么?

标签: c++ random char int ascii


【解决方案1】:

可以尝试替换

cout<<print<<endl;

cout<<(char)character;

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

【讨论】:

    【解决方案2】:

    当你写这篇文章时

    char print = character;
    

    您告诉编译器您希望它将变量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;
    

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

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

    【讨论】:

    • 非常感谢。同样使用“Z”而不是 90 让我更容易阅读。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    相关资源
    最近更新 更多