c++ - 在 C++ 中将十六进制转换为二进制

标签 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]

最佳答案

行内:

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

默认的 switch case 将在其他 case 都不匹配时执行。例如,您应该在其中放置一些代码来处理不正确的输入。

关于c++ - 在 C++ 中将十六进制转换为二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41408013/

相关文章:

C++ 将字符串误认为字符

C++ 观察者模式 : raw pointers vs shared_ptr?

c++ - 在函数调用中定义函数

c++ - 如何在 while 循环中计算 "std::cin>>value"?

c++ - 在多个显示器上管理多个窗口

c++ - 在 C++ 中添加指向字符串的指针

c++ - 以通用方式对所有结构成员求和

c++ - 指针作为函数返回类型的部分特化

c++ - 当 std::uint_fast32_t 在 GCC 中为 4 字节时,std::mt19937 失败

c++ - 我在 C 中遇到指针问题