这是c ++中的一个函数,它接受一个十六进制字符串并将其转换为等效的ASCII字符。
string HEX2STR (string str)
{
string tmp;
const char *c = str.c_str();
unsigned int x;
while(*c != 0) {
sscanf(c, "%2X", &x);
tmp += x;
c += 2;
}
return tmp;
Run Code Online (Sandbox Code Playgroud)
如果输入以下字符串:
537461636b6f766572666c6f77206973207468652062657374212121
Run Code Online (Sandbox Code Playgroud)
输出将是:
Stackoverflow is the best!!!
Run Code Online (Sandbox Code Playgroud)
假设我要在此函数中输入1,000,000个唯一的十六进制字符串,计算需要一段时间。
有没有更有效的方法来完成此操作?
当然。一次查找两个字符:
unsigned char val(char c)
{
if ('0' <= c && c <= '9') { return c - '0'; }
if ('a' <= c && c <= 'f') { return c + 10 - 'a'; }
if ('A' <= c && c <= 'F') { return c + 10 - 'A'; }
throw "Eeek";
}
std::string decode(std::string const & s)
{
if (s.size() % 2) != 0) { throw "Eeek"; }
std::string result;
result.reserve(s.size() / 2);
for (std::size_t i = 0; i < s.size() / 2; ++i)
{
unsigned char n = val(s[2 * i]) * 16 + val(s[2 * i + 1]);
result += n;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)