[C语言]string与Hex的相互转换

由于很多时候,串口通信的协议可能是字符数组构成的,每一个字节都表示一种信息,在调试的时候,将它们输出显示,就需要将hex型式的字符数组转换成便于显示的string字符串,现总结出该函数,仅供参考。

/*************************************************
Function: 		hex2string
Description: 	hex字符数组转换成string字符串,用于printf显示等
Input: 			hex:原字符数组
                len:hex数组的长度
Output: 		ascII:输出的字符串
                newlen:输出的字符串长度
Return: 		
*************************************************/
void hex2string(char *hex,char *ascII,int len,int *newlen)
{
	int i = 0;
	char newchar[100] = {0};
	*newlen=len*3;
	for (i = 0; i< len; i++)
	{
		sprintf(newchar,"%02X ", hex[i]);
		strcat(ascII, newchar);
	}
}

同样的,string也可以转换成hex用于透传时使用,形如AA010203的字符串,转换成0xAA,0x01,0x02,0x03存入数组中。

/*************************************************
Function: 		string2hex
Description: 	字符串转换成hex,要求str只能是大写字母ABCDEF和数字
Input: 			str:要转换的字符串
Output: 		hex:转换后的hex字符数组
Return: 		0 成功
                1 不符合规则,失败
*************************************************/
int string2hex(char* str,char* hex)
{
    int i = 0;
    int j = 0;
    unsigned char temp = 0;
    int str_len = 0;
    char str_cpy[100] = {'0'};
    strcpy(str_cpy,str);
    str_len = strlen(str_cpy);
    if(str_len==0)
    {
        return 1;
    }
    while(i < str_len)
    {
        if(str_cpy[i]>='0' && str_cpy[i]<='F') 
        {
            if((str_cpy[i]>='0' && str_cpy[i]<='9'))
            {
                temp = (str_cpy[i] & 0x0f)<<4;
            }
            else if(str_cpy[i]>='A' && str_cpy[i]<='F')
            {
                temp = ((str_cpy[i] + 0x09) & 0x0f)<<4;
            }
            else
            {
                return 1;
            }
        }
        else
        {
            return 1;
        }   
        i++;
        if(str_cpy[i]>='0' && str_cpy[i]<='F') 
        {
            if(str_cpy[i]>='0' && str_cpy[i]<='9')
            {
                temp |= (str_cpy[i] & 0x0f);
            }
            else if(str_cpy[i]>='A' && str_cpy[i]<='F')
            {
                temp |= ((str_cpy[i] + 0x09) & 0x0f);
            }
            else
            {
                return 1;
            }
        }
        else
        {
            return 1;
        } 
        i++;
        hex[j] = temp;
        //printf("%02x",temp);
        j++;
    }
    //printf("\n");
    return 0 ;
}

代码只是初步实现简单的功能,而且函数内部都限制了字符串长度,根据实际情况再做修改。

猜你喜欢

转载自blog.csdn.net/weixin_43727672/article/details/104532443