• 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。   

  • 相关阅读:
    仿udhcpd配置文件读取的一段代码
    巫师3_战斗_怪物巢穴
    00汇编指令
    在VirtualBox下安装linux操作系统
    Java学习--内部类
    Linux的运行级别和chkconfig用法
    mvn学习1
    JVM调优总结 -Xms -Xmx -Xmn -Xss
    使用代码查看JVM内存使用情况
    jstat命令查看jvm的GC情况 (以Linux为例)
  • 原文地址:https://www.cnblogs.com/dzswise/p/15665547.html
Copyright © 2020-2023  润新知