C语言实现将16进制的字符串转化为2进制


使用C语言将一段字符串中的16进制数转化为2进制,写一个简单的函数来实现这个功能。基本思想是通过对字符比对的方法。

typedef unsigned          char uint8_t;


uint8_t bx[16]={0b0000,0b0001,0b0010,0b0011,0b0100,0b0101,0b0110,0b0111,0b1000,0b1001,0b1010,0b1011,0b1100,0b1101,0b1110,0b1111};

void vd_g_Test_HexToBin2(uint8_t* HexData,uint16_t HexDataLen,uint8_t* BinData,uint16_t BinDataLen)
{
    uint16_t Cnt = 0;
    uint16_t ct = 0;
    uint16_t ctt= 0;
    uint16_t sx = BinDataLen/2;
    uint16_t data_len = HexDataLen;

   
    
    while(HexDataLen--)
    {
    switch (HexData[Cnt]) 
    
    {
        case '0':
        BinData[Cnt] = bx[0];
        break;

        case '1':
        BinData[Cnt] = bx[1];
        break;


        case '2':
        BinData[Cnt] = bx[2];
        break;
        case '3':
        BinData[Cnt] = bx[3];
        break;
        case '4':
        BinData[Cnt] = bx[4];
        break;
        case '5':
        BinData[Cnt] = bx[5];
        break;

        case '6':
        BinData[Cnt] = bx[6];
        break;

        case '7':
        BinData[Cnt] = bx[7];
        break;

        case '8':
        BinData[Cnt] = bx[8];
        break;

        case '9':
        BinData[Cnt] = bx[9];
        break;


        case 'a':
        case 'A':
            BinData[Cnt] = bx[10];
            break;
        case 'b':
        case 'B':
           BinData[Cnt] = bx[11];
            break;
        case 'c':
        case 'C':
            BinData[Cnt] = bx[12];
            break;
        case 'd':
        case 'D':
            BinData[Cnt] = bx[13];
            break;
        case 'e':
        case 'E':
            BinData[Cnt] = bx[14];
            break;
        case 'f':
        case 'F':
            BinData[Cnt] = bx[15];
            break;
        
        }

        Cnt++;
        
        
    }
    
     if (data_len %2 !=0)
    {
        BinData[BinDataLen-1]=0;
    }
   
    while(sx--)
    {
    
    BinData[ct] = BinData[ctt+1]|BinData[ctt]<<4; 
    ct=ct+1;
    ctt= ctt+2;
    }
}

后面的循环是将两个值存在一个数组单元中,比如“0E2C2”  的十六进制字符串 ,数组占用空间为5,转换完为 0E 2C 20,占用空间为3。