混淆将C++中的十六进制转换为二进制
问题描述:
#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-比较]
答
case '0':
case '1':
...
使用所有characters..not号码和字符。
而与一个或一个事.. for(i=0;i<(int) input.length();i++)
答
在行:
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
默认开关壳体将被执行时没有其它情况下匹配的。例如,你应该在那里放置一些处理不正确输入的代码。