【问题标题】:How can I get value of char to convert to int?如何获取 char 的值以转换为 int?
【发布时间】:2013-04-25 17:37:33
【问题描述】:

我想将二进制计数转换为十进制。我的代码 sn-p :

int main(){
    string count;
    char number;
    int counter;
    int score = 0;

    cout << "Wpisz liczbę w systemie binarnym" << endl;
    cin >> count;
    count << endl;

    counter = count.length();

    for (int i = 0; i < counter; i++)
    {
        number = count[i];
        int aaa = (int) number - '0' // is that correct ? I think not.
        score = aaa * pow(2,i) + score;
    }

    count <<wynik;
    return 0;
}

但是我的程序给出了非常奇怪的分数,例如:

输入:100(十进制 8) 输出:1

输入 1000(十进制 16) 输出:1

我不知道为什么。你能帮助我吗 ?我认为,这就是 char 的问题吗?我是真的吗?

谢谢,

对不起我的英语

【问题讨论】:

  • 你也应该为你的缩进道歉:-)
  • 字符串"100"的第一个字符是'1',所以循环中给wynik的第一个赋值是1 * pow(2,0) + 0
  • 您可能需要查看std::stoistd::strtol
  • 英文变量名很适合帮助别人理解你的代码:)
  • @pytajnik:实际上,研究您的代码,它令人惊讶地接近正确!唯一的问题是您正在反向解析数字。您正在为1000 做数学运算,就好像它是0001。而二进制转换为十进制的确实是1

标签: c++ binary decimal converter


【解决方案1】:

试试这个:

int main(){
    string liczba;
    int licznik;
    int wynik = 0;

    cout << "Wpisz liczb w systemie binarnym" << endl;
    cin >> liczba;

    licznik = liczba.length();

    for (int i = 0; i < licznik; i++)
    {
        int aaa = liczba[i] -'0'; // A bit hacky way to convert char to int
        wynik += aaa * pow(2.0,licznik - i - 1); // Minus 1 to get the correct power
    }
    cout << wynik;
    return 0;
}

不确定您的代码中的count 是从哪里得到的,但我认为您的意思实际上是cout
有关字符转换的更多信息,请参阅this question

另外,正如其他人所指出的,当从索引为 0 的字符串中读取字符时,您将提取出重要性降低的二进制数字。这意味着您的指数应该减少,而不是增加。

编辑:我还在你的问题中注意到你正在错误地阅读二进制文件:

输入:100(十进制 8)输出:1
输入 1000(十进制 16)输出:1

100 是 4,而不是 8。同样,1000 是 8,而不是 16。也许您忘记了 2^0 或 1 的数字?

【讨论】:

  • 现在我有非常奇怪的输出: 100 - 16, 1100 - 80, 1000 - 64 。为什么?
  • 尝试用这个完全替换您的原始功能。这个算法应该可以工作。
【解决方案2】:

另一种方法是摆脱涉及强制转换为 from double 的 pow。

int main(){
    string liczba;
    int licznik;
    int wynik = 0;

    cout << "Wpisz liczb w systemie binarnym" << endl;
    cin >> liczba;

    licznik = liczba.length();

    for (int i = 0; i < licznik; i++)
    {
        int aaa = liczba[i] -'0'; // A bit hacky way to convert char to int
        wynik *= 2;   // shift existing total up a power of 2 (could use << 1) 
        wynik += aaa; // Add the next digit
    }
    cout << wynik;
    return 0;
}

【讨论】:

  • +1 - 我故意让我的答案接近建议的解决方案,但这是一种更优雅的方法。
猜你喜欢
  • 1970-01-01
  • 2017-03-21
  • 2016-11-14
  • 2018-09-05
  • 1970-01-01
  • 2011-04-09
  • 2018-05-15
  • 2012-06-06
  • 2012-06-02
相关资源
最近更新 更多