【问题标题】:c++ convert character to integer using ASCIIc ++使用ASCII将字符转换为整数
【发布时间】:2013-01-13 05:17:53
【问题描述】:

我正在开发一个小型 c++ 项目,该项目接收来自用户的 char 数组输入。根据值,我将其转换为 int。我知道有更好的方法可以做到这一点,但我想我会尝试通过 ASCII 将它转换为以后允许其他用途。我当前的转换代码是:-

int ctoi(char *item){
    int ascii, num = 0;
    ascii = static_cast<int>(item[0]);
    if(ascii >= 49 && ascii <=57){
        num = ascii - 48;
    }else{
        return 0;
    }

    ascii = static_cast<int>(item[1]);
    if(ascii >= 48 && ascii <=57){
        num = num * 10;
        num = num + (ascii - 48);
    }else{
        return 0;
    }
    return num;
}

它接收输入到主函数中的 char 数组 item[2] 中,并将其传递给上面的转换函数。该函数将第一个字符转换为 ASCII,然后将 ASCII 的十进制值转换为 num,如果它在 1 和 9 之间,然后将第二个字符转换为 ASCII,如果它在 0 和 9 之间,它将 num 中的值乘以 10 (移动一个单位)并添加 ASCII 值的十进制值。在任何时候它都可能失败,而是返回值 0。

当我在收到一个值后计算函数并在控制台中运行此代码时,它适用于单个数字 (1 - 9),但是当我尝试使用一个两位数字时,它会重复数字,例如 for 23,会输出2233。

感谢您的帮助。

【问题讨论】:

  • 专业提示:不要使用484957等 - 使用'0''1''9'等。
  • 为什么不用内置的c函数atoi或strtoi?
  • 我已经尝试过了,它似乎可以按照您对我的期望工作,我看不出有任何问题(除了有更好的方法来做到这一点......)。可能问题出在调用它并显示结果的代码中,你能把它包括进去吗?
  • @PaulR (1) 我同意。 (2) not 有有效的用例为此使用 char-constants,尽管我严重怀疑 OP 是其中之一。具体来说,用于处理已知的ASCII字符字节内容的可移植代码。处理此类文件时,在非 ASCII 平台上使用 '0'..etc 内码不起作用。但是,如果那是问题并且 OP 正在所说的平台上编程,我怀疑他们是否在问这个问题(因此我同意)。只是想提一下。
  • 即使是一个数字,这如何工作?假设您传递“5”,(字节:{ '5', 0 })。 item[0] 的第一个测试开始范围内通过,因此 num 设置为 5item[1] 在范围内的下一个测试失败,您返回0。或者我完全看错了代码。

标签: c++ ascii


【解决方案1】:

我想知道您是如何将输入读入一个两字符数组的。请注意,习惯上以空字符来终止此类字符串,从而只留下一个用于实际输入。为了在 C++ 中读取字符串,请使用以下代码:

std::string s;
std::cin >> s;

或者,对于整行,使用这个:

std::string line;
getline(std::cin, line);

无论如何,这些都是任何 C++ 文本中解释的基础知识。去读一读,这是不可避免的!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多