2016-12-31 124 views
0
#include <string> 
#include <iostream> 

using namespace std; 

int main() { 
    string input, numBin = ""; 
    cout << "Enter a hexadecimal number: "; 
    getline(cin, input); 

    for (int i = 0; i < input.length(); i++) { 
     switch (input[i]) { 
      case 0: numBin.append("0000"); break; 
      case 1: numBin.append("0001"); break; 
      case 2: numBin.append("0010"); break; 
      case 3: numBin.append("0011"); break; 
      case 4: numBin.append("0100"); break; 
      case 5: numBin.append("0101"); break; 
      case 6: numBin.append("0110"); break; 
      case 7: numBin.append("0111"); break; 
      case 8: numBin.append("1000"); break; 
      case 9: numBin.append("1001"); break; 
      case 'a': numBin.append("1010"); break; 
      case 'A': numBin.append("1010"); break; 
      case 'b': numBin.append("1011"); break; 
      case 'B': numBin.append("1011"); break; 
      case 'c': numBin.append("1100"); break; 
      case 'C': numBin.append("1100"); break; 
      case 'd': numBin.append("1101"); break; 
      case 'D': numBin.append("1101"); break; 
      case 'e': numBin.append("1110"); break; 
      case 'E': numBin.append("1110"); break; 
      case 'f': numBin.append("1111"); break; 
      case 'F': numBin.append("1111"); break; 
      default: break; 
     } 
    } 
    cout << "Your number in binary is " << numBin << "."; 
} 

该程序应该将十六进制输入('input')更改为二进制结果('numBin')。我没有太多的使用switch语句的经验,也没有完全理解“默认”的情况,所以对此的任何澄清或者如果我错误地使用它将会有所帮助!混淆将C++中的十六进制转换为二进制

我得到的错误是在for循环,它thorws:符号和无符号整数表达式的比较[-Wsign-比较]

回答

2
case '0': 
case '1': 
... 

使用所有characters..not号码和字符。

而与一个或一个事.. for(i=0;i<(int) input.length();i++)

2

在行:

for (int i = 0; i < input.length(); i++) ... 

input.length()返回一个size_t,这是一个无符号类型。 (见http://www.cplusplus.com/reference/string/string/length/

比较有符号和无符号值是不是安全的,这就是为什么编译器会发出警告,请阅读这篇文章更多关于它在许多其他: A warning - comparison between signed and unsigned integer expressions

要解决它,只需更改为

unsigned int i = 0 

默认开关壳体将被执行时没有其它情况下匹配的。例如,你应该在那里放置一些处理不正确输入的代码。

相关问题