如何获取char的值以转换为int?

时间:2013-05-01 17:13:06

标签: c++ binary decimal converter

我想将二进制计数转换为十进制。我的代码片段:

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的问题?我是真的吗?

谢谢,

对不起我的Englosh

2 个答案:

答案 0 :(得分: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位?

答案 1 :(得分: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 *= 2;   // shift existing total up a power of 2 (could use << 1) 
        wynik += aaa; // Add the next digit
    }
    cout << wynik;
    return 0;
}