在C ++中优化十六进制到ASCII函数

1 c++ hex ascii function

这是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个唯一的十六进制字符串,计算需要一段时间。

有没有更有效的方法来完成此操作?

Ker*_* SB 5

当然。一次查找两个字符:

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)