16进制串hex与ASCII字符串相互转换
提供两个函数,方便十六进制串与ASCII 字符串之间的相互转换,使用函数需要注意的是返回的串是在堆上通过 calloc 分配的,所以,记得使用完返回值释放该块,并且将指向该块的指针 =NULL 。
char *chstohex ( char* chs ) { char hex[16] = { '0', '1', '2', '3', '4', '5', '6', \ '7', '8','9', 'A', 'B', 'C', 'D', 'E', 'F' }; int len = strlen ( chs ); char* ascii = NULL ; ascii = (char*)calloc ( len * 3 + 1, sizeof(char) ); // calloc ascii int i = 0; while( i < len ) { ascii[i*2] = hex[(int)( (char)chs[i] / 16 )] ; ascii[i*2 + 1] = hex[(int)( (char)chs[i] % 16 )] ; ++i; } return ascii; // ascii 返回之前未释放 } // 函数输入16进制字符串,输出对应的字符串 char *hextochs ( char* ascii ) { int len = strlen ( ascii ) ; if( len%2 != 0 ) return NULL ; char *chs = NULL ; chs = (char*)calloc( len / 2 + 1, sizeof(char) ); // calloc chs int i = 0 ; char ch[2] = {0}; while( i < len ) { ch[0] = ( (int)ascii[i] > 64 ) ? ( ascii[i]%16 + 9 ) : ascii[i]%16 ; ch[1] = ( (int)ascii[i + 1] > 64 ) ? ( ascii[i + 1]%16 + 9 ) : ascii[i + 1]%16 ; chs[i/2] = (char)( ch[0]*16 + ch[1] ); i += 2; } return chs ; // chs 返回前未释放 }