【问题标题】:Converting an Ascii Character to an Integer将 Ascii 字符转换为整数
【发布时间】:2018-04-11 02:45:41
【问题描述】:

大家好,我这里有一个程序,基本上需要一个密钥来打开加密数据,但由于某种原因,每次我运行程序时,将 Ascii 数字转换为字符时,我都会得到带有错误 Ascii 值的字符。例如,在下面的代码中,如果它尝试将 Ascii 值“50”转换为 char,我会得到“e”而不是“2”。任何帮助将非常感激。

    #include "stdafx.h"
    #include "iostream"
    #include "string"
    #include <cstdlib>
    #include <ctime>
    #include <algorithm>

    using namespace std;

    string key = "5053525055";
    int asciiValues;
    char asciiChars;
    for (int i = 0; i < key.length(); i += 2)
    {
        asciiValues = (int)(key[i] + key[i + 1]);
        asciiChars = (int)(key[i] + key[i + 1]);
    }

这里有完整的代码供有兴趣的人参考。

    #include "stdafx.h"
    #include "iostream"
    #include "string"
    #include <cstdlib>
    #include <ctime>
    #include <algorithm>

    using namespace std;

    void encryption(string text)
    {
        char asciiChar;
        int asciiValue = 0;
        string key;
        string encoded;
        srand((unsigned)time(0));
        int random_integer = rand();
        cout << random_integer << endl;
        //Creates the key for the string.
        for (int i = 0; i < to_string(random_integer).length(); i++)
        {
           int asciiValue = (char)(to_string(random_integer)[i]);
           key = key + to_string(asciiValue);
           cout << asciiValue << endl;
        }
        int help = to_string(asciiValue).length();
        /*Function that converts the individual characters in the input
        string to AsciiValues and then puts them into the encoded data.*/
        for (int i = 0; i < text.length(); i++)
        {
            int asciiValue = char(text[i]) + random_integer;
            encoded = encoded + to_string(asciiValue) + ".";
        }

     cout << "Encrypted data: " << encoded << endl;
     cout << "Your key for this encoded data is " << key << endl;
    }

    void decryption(string text, string key)
    {
    char asciiChars;
    int asciiValues;
    int number;
    string qkey;
    string decoded;
    /*for (int i = 0; i < to_string(random_integer).length(); i++)
    {
        int asciiValue = (char)(to_string(random_integer)[i]);
        key = key + to_string(asciiValue);
        cout << asciiValue << endl;
    }*/
    for (int i = 0; i < key.length(); i += 2)
    {
        asciiValues = (int)(key[i] + key[i + 1]);
        asciiChars = (int)(key[i] + key[i + 1]);
        number = asciiChars - '0';
        cout << number << endl;
    }
    cin >> qkey;
    }


    int main()
    {
    string answer;
    int question = 0;
    string vkey;
    ask:
    cout << "Would you like to:\nEncrypt Data[1]\nDecrypt Data[2]\nExit[3]" << 
    endl;

    cin >> question;
    if (to_string(question) != "1"&&to_string(question) != 
    "2"&&to_string(question) != "3")
    {
        goto ask;
    }
    else if (to_string(question) == "1")
    {
        while (answer.length() > 1000 || answer.length() < 1)
    {
        cout << "Please enter a string that has a length of 1 to 1000 
        characters. ";
        cin >> answer;
        cout << endl;
    }
    encryption(answer);
    cin >> answer;
    goto ask;
    }
    else if (to_string(question) == "2")
    {
        cout << "Please enter the string you would like decrypted. ";
        cin >> answer;
        cout << endl;
        cout << "Now please enter the key for the string. ";
        cin >> vkey;
        cout << endl;
        decryption(answer, vkey);
     }

return 0;

}

【问题讨论】:

  • number = ASCIIchar - '0';ASCIIchar = number + '0'; 见:ASCII Table
  • 编辑您的问题以包含minimal reproducible example
  • 请详细说明,因为当我尝试这是行不通的。
  • 我认为您最好详细说明当您尝试@DavidC.Rankin 的建议 HatBreakingZoot 时发生的事情。关于number = ASCIIchar - '0';,没什么好说的了。
  • 在我输入代码后的 for 循环结束时,它返回几乎相同的东西给或取一个零。我对 c++ 比较陌生,所以这很可能是我的一个错误。

标签: c++ encryption ascii


【解决方案1】:

ASCII 数字字符以 30hex(或 48dec)开头。因此'0' = 30hex。因此,要获取 ASCII 字符,您必须添加 '0' (30h)。

'cout &lt;&lt; 5 + '0'; // 53dec (35hex)

【讨论】:

  • 非常感谢 bcr 向我解释这对我来说更有意义,尤其是因为我是 C++ 新手。
猜你喜欢
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 2013-01-13
  • 2020-09-03
  • 2015-01-26
  • 2016-08-01
相关资源
最近更新 更多