使用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。