如何在C++中将十六进制字符转换为二进制

How to convert a hex char to binary in C++?

本文关键字:字符 转换 二进制 十六进制 C++      更新时间:2023-10-16

我正在尝试转换来自用户的两 (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;
}
首先

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

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

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

如果你想有一个好的可扩展性,你应该考虑使用 sizeof(M(/sizeof char 或全局常量或 #define 来表示你可以拥有的最大字符串......

希望它有帮助。