00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #pragma once
00019
00020 namespace mongo {
00021
00022 inline int fromHex( char c ) {
00023 if ( '0' <= c && c <= '9' )
00024 return c - '0';
00025 if ( 'a' <= c && c <= 'f' )
00026 return c - 'a' + 10;
00027 if ( 'A' <= c && c <= 'F' )
00028 return c - 'A' + 10;
00029 assert( false );
00030 return 0xff;
00031 }
00032 inline char fromHex( const char *c ) {
00033 return (char)(( fromHex( c[ 0 ] ) << 4 ) | fromHex( c[ 1 ] ));
00034 }
00035
00036 inline string toHex(const void* inRaw, int len) {
00037 static const char hexchars[] = "0123456789ABCDEF";
00038
00039 StringBuilder out;
00040 const char* in = reinterpret_cast<const char*>(inRaw);
00041 for (int i=0; i<len; ++i) {
00042 char c = in[i];
00043 char hi = hexchars[(c & 0xF0) >> 4];
00044 char lo = hexchars[(c & 0x0F)];
00045
00046 out << hi << lo;
00047 }
00048
00049 return out.str();
00050 }
00051
00052 inline string toHexLower(const void* inRaw, int len) {
00053 static const char hexchars[] = "0123456789abcdef";
00054
00055 StringBuilder out;
00056 const char* in = reinterpret_cast<const char*>(inRaw);
00057 for (int i=0; i<len; ++i) {
00058 char c = in[i];
00059 char hi = hexchars[(c & 0xF0) >> 4];
00060 char lo = hexchars[(c & 0x0F)];
00061
00062 out << hi << lo;
00063 }
00064
00065 return out.str();
00066 }
00067 }