[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的相互转换的主要内容,如果未能解决你的问题,请参考以下文章