ASCII字符串转16进制字符串(HEX字符串)
string pp = "whoami";
string hex;
for_each(pp.begin(), pp.end(), [&hex](char c){
char val[3] = {0};
sprintf(val, "%X", c); //小写则为%x
hex.append(string(val));
});
输出为77686F616D69
16进制字符串(Hex字符串)转ASCII字符串
int Char2Int(char c)
{
if (c >= '0'&& c <= '9')
return c - '0';
else if (c >= 'A' && c <= 'F')
return c - 'A' + 10;
else if (c >= 'a' && c <= 'f')
return c - 'a' + 10;
return -1;
}
bool HexString2AscString(const string& in)
{
if (in.length() & 1)
return false;
static string ptn = "0123456789ABCDEFabcdef";
size_t found = in.find_first_not_of(ptn);
if (found != in.npos)
return false;
string out;
out.reserve(in.length() >> 1);
for (size_t pos = 0; pos < in.length(); pos+=2)
out.push_back((Char2Int(in[pos]) << 4) | Char2Int(in[pos+1]));
cout<<out<<endl;
return true;
}