zoukankan      html  css  js  c++  java
  • 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。   

  • 相关阅读:
    Elasticsearch 内存配置应用案例
    shell进阶篇之字典和数组结合应用案例
    shell进阶篇之数组应用案例
    nginx的负载均衡
    nginx的反向代理
    ajax的几种使用
    springboot整合Redis
    java的Spring中@Value注解的使用
    Redis的五种数据类型
    冒泡排序
  • 原文地址:https://www.cnblogs.com/dzswise/p/15665547.html
Copyright © 2011-2022 走看看