当 字符串 中有’\0’时无法通过 tcp 将内容发送的客户端,因此需要将原始字符串转换为16 进制 表示的形式然后进行发送,发送后要对16进制的字符串进行转换,以下代码就是解决16进制转 string 的。
# include <iostream>
#include <string>
#include <malloc.h>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
char * HexToStr(char *pbSrc, int nLen)
{
char ddl, ddh;
char *pbDest;
pbDest = (char *)malloc(nLen/2+1);
memset (pbDest,0,nLen/2);
int i;
for (i = 0; i <= nLen-2; i+=2)
{
if(pbSrc[i] >= 48 && pbSrc[i] <= 57)
{
ddh = (pbSrc[i]-48)*16;
}
if(pbSrc[i] >= 65 && pbSrc[i] <= 70)
{
ddh = (pbSrc[i] – 55)*16;
}
if(pbSrc[i] >= 97 && pbSrc[i] <= 102)
{
ddh = (pbSrc[i] – 87)*16;
}
if(pbSrc[i+1] >= 48 && pbSrc[i+1] <= 57)
{
ddl = pbSrc[i+1]-48;
}
if(pbSrc[i+1] >= 65 && pbSrc[i+1] <= 70)
{
ddl = pbSrc[i+1] – 55;
}
if(pbSrc[i+1] >= 97 && pbSrc[i+1] <= 102)
{
ddl = pbSrc[i+1] – 87;
}
pbDest[i/2] = ddh+ddl;
}
pbDest[nLen/2+1] = ‘\0’;
return pbDest;
}
int main()
{
char *test = (char *)”68656c6c6f20776f726c64″;
char *ptr=nullptr;
ptr = HexToStr(test, 22);
cout << ptr << endl;
free(ptr);
return 0;
}