diff --git a/ChangeLog b/ChangeLog index c507a5b7..bc22a732 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-03-05 Tatsuhiro Tsujikawa + + Rewritten util::toHex(). + * src/util.cc + 2010-03-05 Tatsuhiro Tsujikawa Removed SocketBuffer::feedAndSend(). Renamed diff --git a/src/util.cc b/src/util.cc index 01e4bb96..354be86e 100644 --- a/src/util.cc +++ b/src/util.cc @@ -323,14 +323,22 @@ std::string urldecode(const std::string& target) { } std::string toHex(const unsigned char* src, size_t len) { - char* temp = new char[len*2+1]; - for(size_t i = 0; i < len; ++i) { - sprintf(temp+i*2, "%02x", src[i]); + std::string out(len*2, '\0'); + std::string::iterator o = out.begin(); + const unsigned char* last = src+len; + for(const unsigned char* i = src; i != last; ++i) { + *o = (*i >> 4); + *(o+1) = (*i)&0x0f; + for(int j = 0; j < 2; ++j) { + if(*o < 10) { + *o += '0'; + } else { + *o += 'a'-10; + } + ++o; + } } - temp[len*2] = '\0'; - std::string hex = temp; - delete [] temp; - return hex; + return out; } std::string toHex(const char* src, size_t len)