繁体   English   中英

在C ++中将十六进制转换为二进制的混乱

[英]Confusion Converting Hexadecimal to Binary in 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语句方面没有太多经验,也不完全了解“默认”情况,因此,对此进行任何澄清或如果我使用不当都会有所帮助!

我遇到的错误是在for循环上,并且它很烦人:有符号和无符号整数表达式之间的比较[-Wsign-compare]

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

使用所有字符。不要使用数字和字符。

还有一件矿石.. 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/

比较有符号和无符号的值是不安全的,这就是为什么编译器会警告您,并在这篇文章中进一步了解它,原因如下: 警告-有符号和无符号整数表达式之间的比较

要解决此问题,只需更改为

unsigned int i = 0

当其他情况都不匹配时,将执行默认的切换情况。 例如,您应该在其中放置一些处理错误输入的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM