字符串转十六进制字符串
/**
* @brief String to hexadecimal string
* @author ghyll
* @param const char *Input : type of char point to ascii String
* @param char *Output : type of char point to hex String
* @return output string point
*/
char * StringToHexString(const char *Input ,char *Output)
{
uint16_t i = 0;
char *pData = Output;
while(*Input != '\0')
{
*Output = (*Input)>>4;
if(*Output >=0 && *Output<10)
{
*Output += '0';
}
else if(*Output >=10 && *Output<16)
{
*Output = *Output - 10;
*Output += 'a';
}
else
{
*Output = 0;
}
Output++;
*Output = (*Input)&0X0F;
if(*Output >=0 && *Output<10)
{
*Output += '0';
}
else if(*Output >=10 && *Output<16)
{
*Output = *Output - 10;
*Output += 'a';
}
else
{
*Output = 0;
}
Output++;
Input++;
}
*Output = '\0';
return pData;
}
十六进制字符串转字符串
/**
* @brief Hexadecimal string to string
* @author ghyll
* @param const char *Input : type of const char point to hex String
* @param char *Output : type of char point to ascii String
* @return output string point
*/
char * HexStringToString(const char *Input ,char *Output)
{
uint16_t i = 0;
char *pData = Output;
while(*Input != '\0')
{
if(*Input >='0' && *Input<'A')
{
*Input = (*Input) - '0';
}
else if(*Input >='a' && *Input<='f')
{
*Input = *Input -'a' + 10;
}
else if(*Input >='A' && *Input<='F')
{
*Input = *Input -'A' + 10;
}
else
{
*Input = 0;
}
*Output = (*Input)<<4;
Input++;
if(*Input >='0' && *Input<'A')
{
*Input = (*Input) - '0';
}
else if(*Input >='a' && *Input<='f')
{
*Input = *Input -'a' + 10;
}
else if(*Input >='A' && *Input<='F')
{
*Input = *Input -'A' + 10;
}
else
{
*Input = 0;
}
*Output = ((*Output)&0xF0)|(( *Input)&0x0F);
Output++;
Input++;
}
*Output = '\0';
return pData;
}
注意事项
1、使用这两个函数的时候应当输入应当采用字符串,使用字符数组可能会产生数组越界导致程序崩溃。如使用字符数组,请在字符数组结尾加上字符串结束符 ‘\0’。
2、使用的时候应当注意存有16进制字符串的缓存(Buffer)大小应该是Ascii字符串缓存大小的一半。
举例
1、字符串转十六进制字符串
Input: ABCD
Output:41424344
2、十六进制字符串转字符串
Input: 71776572747265
Output:qwertre
附:在线字符串转16进制字符串工具:转换工具