【问题标题】:How to convert a hex char to binary in C++?如何在 C++ 中将十六进制字符转换为二进制?
【发布时间】:2018-09-28 05:18:40
【问题描述】:

我正在尝试转换来自用户的两 (2) 个输入。 我在变量M 中输入。 K 变量未使用。

我尝试使用for 循环来解决它,但是我做不到。第一个循环无法停止。

使用数组有错吗? 而且,我可以使用for 循环将二进制输出输入到新数组中吗?

这是我的代码:

include<iostream>
using namespace std;

int main()
{
    char M[64],K[64];
    long int i=0;

    cout<<"Enter M: ";
    cin>>M;
    cout<<"M= ";

    while(M[i])
    {
        switch(M[i])
        {
        case '0':
            cout<<"0000";
            break;
        case '1':
            cout<<"0001";
            break;
        case '2':
            cout<<"0010";
            break;
        case '3':
            cout<<"0011";
            break;
        case '4':
            cout<<"0100";
            break;
        case '5':
            cout<<"0101";
            break;
        case '6':
            cout<<"0110";
            break;
        case '7':
            cout<<"0111";
            break;
        case '8':
            cout<<"1000";
            break;
        case '9':
            cout<<"1001";
            break;
        case 'A':
            cout<<"1010";
            break;
        case 'B':
            cout<<"1011";
            break;
        case 'C':
            cout<<"1100";
            break;
        case 'D':
            cout<<"1101";
            break;
        case 'E':
            cout<<"1110";
            break;
        case 'F':
            cout<<"1111";
            break;
        case 'a':
            cout<<"1010";
            break;
        case 'b':
            cout<<"1011";
            break;
        case 'c':
            cout<<"1100";
            break;
        case 'd':
            cout<<"1101";
            break;
        case 'e':
            cout<<"1110";
            break;
        case 'f':
            cout<<"1111";
            break;
        default:
            cout<<"nInvalid hexadecimal digit "<<M[i];
        }
        i++;
    }
    return 0;
    cout<<"\nEnter K: ";
    cin>>K;
    cout<<"K: ";
    while(K[i])
    {
        switch(K[i])
        {
        case '0':
            cout<<"0000";
            break;
        case '1':
            cout<<"0001";
            break;
        case '2':
            cout<<"0010";
            break;
        case '3':
            cout<<"0011";
            break;
        case '4':
            cout<<"0100";
            break;
        case '5':
            cout<<"0101";
            break;
        case '6':
            cout<<"0110";
            break;
        case '7':
            cout<<"0111";
            break;
        case '8':
            cout<<"1000";
            break;
        case '9':
            cout<<"1001";
            break;
        case 'A':
            cout<<"1010";
            break;
        case 'B':
            cout<<"1011";
            break;
        case 'C':
            cout<<"1100";
            break;
        case 'D':
            cout<<"1101";
            break;
        case 'E':
            cout<<"1110";
            break;
        case 'F':
            cout<<"1111";
            break;
        case 'a':
            cout<<"1010";
            break;
        case 'b':
            cout<<"1011";
            break;
        case 'c':
            cout<<"1100";
            break;
        case 'd':
            cout<<"1101";
            break;
        case 'e':
            cout<<"1110";
            break;
        case 'f':
            cout<<"1111";
            break;
        default:
            cout<<"nInvalid hexadecimal digit "<<K[i];
        }
        i++;
    }
    return 0;
}

【问题讨论】:

  • 首先,请阅读How to Ask并创建一个minimal reproducible example。然后,请形成简短、完整的句子,开头是大写字母,结尾是句号。您的初始文本几乎无法阅读,因为一个语句结束和下一个语句开始的位置为零。
  • 删除 M 和 K 循环之间的 return 0;
  • 那么什么不起作用?当我运行您的代码时,它似乎工作正常。 cpp.sh/3h7xa

标签: c++ while-loop binary hex


【解决方案1】:

首先,您正在使用 2 部分代码,重复使用,您应该考虑使用更高可扩展性的函数(想象一下,如果您想转换 5 个输入,那么复制粘贴 5 次开关不是一个好习惯。

然后,for 循环主要用于已知大小的集合,而 while 用于未知大小的集合,因此对于 for,您只需输入数组的大小即可:

for(int i = 0;i<64;i++){
  convert(M[i]);
}

如果您想获得良好的可扩展性,您应该考虑使用 sizeof(M)/sizeof char 或全局常量或 #define 之类的东西作为您可以拥有的最大字符串...

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2018-01-31
    • 2020-01-04
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2012-01-22
    • 2017-02-23
    相关资源
    最近更新 更多