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

Posted 雾里赏花

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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 ;

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

以上是关于[C语言]string与Hex的相互转换的主要内容,如果未能解决你的问题,请参考以下文章

Golang中的[]byte与16进制(String)之间相互转换

二进制与十六进制之间相互转换

c++ 字符串与数字相互转换

如何用JavaScript实现Hex与ASCII之间的转换

021Java中汉子与数字的相互转换,利用字符变量保存中文

hex文件转换成C语言