Вы можете попробовать другой метод преобразования строки в гекс. Я написал две функции. Str_to_hex - это мой метод. str_to_hex2 - это ваш. Я опускаю кодировку base64. И тогда я вызвал 1M раз мою функцию и вашу. Время выполнения для str_to_hex составляет
time ./a.out
real 0m0.365s
user 0m0.360s
sys 0m0.010s
И время выполнения для str_to_hex2:
time ./a.out
real 0m3.253s
user 0m3.220s
sys 0m0.000s
Ubuntu 10.04, 64-битная версия, g ++ 4.4.3, опция -O3.
Код программы тестирования ниже.
#include <string>
#include <iostream>
#include <sstream>
#include <iomanip>
void str_to_hex() {
std::string ssir = "DNQwSinfOUSSWd+U04r23A==";
static const char *hex = "0123456789ABCDEF";
std::string result;
result.reserve(ssir.size() * 3);
for (std::string::const_iterator i = ssir.begin(), end = ssir.end(); i != end; ++i) {
if (i != ssir.begin())
result.push_back(':');
result.push_back(hex[*i >> 4]);
result.push_back(hex[*i & 0xf]);
}
}
void str_to_hex2() {
std::string ssir = "DNQwSinfOUSSWd+U04r23A==";
std::stringstream ss;
for (int i=0; i<ssir.size(); ++i) {
if (i != 0) ss << ':';
ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<unsigned int>(ssir[i] & 0xff);
}
}
int main() {
for (int i = 0; i < 1000000; ++i)
str_to_hex();
}