进制转换
str_to_hex
static int str_to_hex(char *dest,char *src,int src_len)
{
int count = 0;
char str[] = "0123456789ABCDEF";
if(!dest || !src){
printf("dest || src is NULL");
return -1;
}
while('\0' != *src){
*dest++ = str[*src>>4];
*dest++ = str[*src & 0x0F];
src++;
count++;
}
return count;
}
hex_to_str
static int hex_to_str(char *dst,char *src,int src_len)
{
int count = 0;
char *dest = dst;
if(!dest || !src){
printf("dest || src is NULL");
return -1;
}
while('\0' != *src){
if(isdigit(*src)){
*dest = (*src - '0')<<4;
}else if(isupper(*src)){
*dest = ((*src - 'A') + 10)<<4;
}else if(islower(*src)){
*dest = ((*src - 'a') + 10)<<4;
}
src++;
if(isdigit(*src)){
*dest |= *src - '0';
}else if(isupper(*src)){
*dest |= *src - 'A' + 10;
}else if(islower(*src)){
*dest |= *src - 'a' + 10;
}
count++;
src++;
dest++;
}
return count;
}
测试代码
static void print_hex(char *str,int str_len)
{
int i = 0;
char buff[1024] = {0};
for(i = 0; i < str_len;i++){
sprintf(buff + i * 3,"%02x ",(unsigned char)str[i]);
}
PASSION_LOGI("buff: %s",buff);
}
int main(int argc,char *argv[])
{
int len = 0;
char str[] = "080027420aa7";
char result[256] = {0};
PASSION_LOGI("str : %s",str);
len = str_to_hex(result,str,strlen(str));
PASSION_LOGI("result: %s",result);
memset(result,0x00,sizeof(result));
len = hex_to_str(result,str,strlen(str));
print_hex(result,len);
return 0;
}