|
|
|
@ -361,15 +361,20 @@ inline int64 abs64(int64 n)
@@ -361,15 +361,20 @@ inline int64 abs64(int64 n)
|
|
|
|
|
template<typename T> |
|
|
|
|
std::string HexStr(const T itbegin, const T itend, bool fSpaces=false) |
|
|
|
|
{ |
|
|
|
|
if (itbegin == itend) |
|
|
|
|
return ""; |
|
|
|
|
const unsigned char* pbegin = (const unsigned char*)&itbegin[0]; |
|
|
|
|
const unsigned char* pend = pbegin + (itend - itbegin) * sizeof(itbegin[0]); |
|
|
|
|
std::string str; |
|
|
|
|
str.reserve((pend-pbegin) * (fSpaces ? 3 : 2)); |
|
|
|
|
for (const unsigned char* p = pbegin; p != pend; p++) |
|
|
|
|
str += strprintf((fSpaces && p != pend-1 ? "%02x " : "%02x"), *p); |
|
|
|
|
return str; |
|
|
|
|
std::vector<char> rv; |
|
|
|
|
static char hexmap[16] = { '0', '1', '2', '3', '4', '5', '6', '7', |
|
|
|
|
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; |
|
|
|
|
rv.reserve((itend-itbegin)*3); |
|
|
|
|
for(T it = itbegin; it < itend; ++it) |
|
|
|
|
{ |
|
|
|
|
unsigned char val = (unsigned char)(*it); |
|
|
|
|
if(fSpaces && it != itbegin) |
|
|
|
|
rv.push_back(' '); |
|
|
|
|
rv.push_back(hexmap[val>>4]); |
|
|
|
|
rv.push_back(hexmap[val&15]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return std::string(rv.begin(), rv.end()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline std::string HexStr(const std::vector<unsigned char>& vch, bool fSpaces=false) |
|
|
|
|