2012-04-07 23 views

回答

2

看起來是來自BSONElement::toString

case jstOID: 
    s << "ObjectId('"; 
    s << __oid() << "')"; 
    break; 

而且__oid()給你一個mongo::OID<< operator電話str

inline StringBuilder& operator<< (StringBuilder& s, const OID& o) { return (s << o.str()); } 

而且只是呼籲原始字節toHexLower

string str() const { return toHexLower(data, 12); } 

最後,toHexLower做到這一點:

inline string toHexLower(const void* inRaw, int len) { 
    static const char hexchars[] = "abcdef"; 

    StringBuilder out; 
    const char* in = reinterpret_cast<const char*>(inRaw); 
    for (int i=0; i<len; ++i) { 
     char c = in[i]; 
     char hi = hexchars[(c & 0xF0) >> 4]; 
     char lo = hexchars[(c & 0x0F)]; 

     out << hi << lo; 
    } 

    return out.str(); 
} 

的字串是不是在JavaScript中完成的,它是用C++完成。

上面使用的是MongoDB的2.0分支,但(當前)主控是相同的(或幾乎是這樣)。

+0

感謝您瀏覽您的回覆中的代碼。很有幫助! – ericsoco 2012-04-07 00:51:19

+0

哦,一個快速的澄清請求,因爲操作員是非常難以谷歌,我不是一個C + +人 - 你能解釋(或鏈接到解釋)''<<' and '>>'運營商?我認爲這是一個變幻莫測的事情,但並不確定。並且,我認爲'&'是一個AND位掩碼? – ericsoco 2012-04-07 00:53:05

+1

@ericsoco:'''運算符通常用於在C++中追加或寫入某個緩衝區,所以'out << hi << lo'將'hi'和'lo'附加到'out'。如果您需要搜索,總會有[symbolhound.com](http://symbolhound.com/)。 – 2012-04-07 00:55:06

相關問題