2013-05-01 80 views
-1

我想将二进制数转换为十进制。我的代码片段:我怎样才能获得char值转换为int?

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; 
} 

但我PROGRAMM给人很奇怪的分数,例如:

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

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

我不知道为什么。你可以帮我吗 ?我认为,那是char的问题?我真的吗?

感谢,

对不起,我Englosh

+2

你应该为你的缩进道歉太:-) – 2013-05-01 17:16:01

+0

这是非常有趣的:) – TN888 2013-05-01 17:18:23

+0

字符串'中的第一个字符“100”''是'1'',所以先分配给'wynik'在该循环是'1 * pow(2,0)+ 0'。 – dyp 2013-05-01 17:18:37

回答

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
有关char转换的更多信息,请参阅this question

另外,正如其他人指出的,当从一个以0索引开始的字符串中读取字符时,您将取出二进制数字,递减的意义为。这意味着你的指数应该减少,而不是增加。

编辑:我也注意到你的问题,你不正确读取二进制:

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

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

+0

现在我有非常奇怪的输出:100 - 16,1100 - 80,1000 - 64。为什么? – TN888 2013-05-01 19:05:14

+0

尝试用这个完全替换你原来的功能。这个算法应该工作。 – eriknelson 2013-05-01 19:10:34

+0

它的工作原理! ! ! ! ! ! ! ! ! – TN888 2013-05-01 19:34:00

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; 
} 
+0

+1 - 我故意让我的答案接近建议的解决方案,但这是一个更优雅的方法。 – eriknelson 2013-05-02 18:52:36