C ++将字符串转换为十六进制字符串的最有效方法

时间:2016-01-24 20:14:43

标签: c++

我有这个:

std::string TCPMessengerServer::hexStr(unsigned char *data, int len)
{

    constexpr char hexmap[] = { '0', '1', '2', '3', '4', '5', '6', '7',
        '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

    std::string s(len * 2, ' ');
    for (int i = 0; i < len; ++i) {
        s[2 * i] = hexmap[(data[i] & 0xF0) >> 4];
        s[2 * i + 1] = hexmap[data[i] & 0x0F];
    }
    return s;
}

但是,我想知道是否有更有效的方法。 我还想知道是否有更简单的方法,但如果是这样,他们会表现出什么样的权衡取舍。

1 个答案:

答案 0 :(得分:0)

对于超过几个字符串的字符串,避免可能的动态内存分配会更有效。

一种避免可能的好方法是让调用者传递一个缓冲区来放置结果,并使用动态分配合适的缓冲区(例如std::string来提供默认包装器,就像在你的码)。

然而,除非测量结果表明这个功能在性能方面绝对是关键的,否则这很可能只是浪费了工作:当然,这不是一件好事。