2013-10-18 128 views
1

與C++的MongoDB驅動轉換爲const char *類型爲int數組

這裏,所以我做的測試是我的測試代碼

http://pastebin.com/eQUekQU2

在代碼中我做一個小整數數組和將它作爲二進制插入到mongo數據庫中。

我檢索與這行代碼二進制作爲我遍歷行

mongo::BSONElement array = obj["binTest"]; 

此時我在這個數組變量這是BSONElement類型的二進制。我想將這個二進制轉換回整數數組。要做到這一點的函數可以在API中可以看出

http://api.mongodb.org/cplusplus/current/classmongo_1_1_b_s_o_n_element.html#a8f4902eacf15f5069f4bb752bfd0aef4

函數頭

const char* mongo::BSONElement::binData (int &len)const 

我想運行的功能,爲const char得到的二進制數據*格式,並將其轉換成int數組。我可以對它進行分類嗎?還是必須每4個字節進行一次並將其放入一個數組中?

感謝

+0

char數組和int數組之間的關係如何。 –

+0

char數組應該只代表通用的二進制數據,可以將其轉換爲任何對您有意義的數據。那麼這是一個無符號的字符數組通常類似於我不確定這是否是無符號的。 – Irlanco

回答

0

只要您運行在具有相同字節順序硬件架構的代碼(在PC上是小字節序),就可以檢索到字符指針強制轉換爲Int32指針,並把它當作一個int32數組。

不過,如果你在你的心中數據交換和跨平臺的互操作性,這將是一個壞主意,把數據類型的數組作爲存儲/交換目的字節數組。

您需要考慮到不同的硬件平臺上可能有不同的字節序。在這種情況下,將char指針轉換爲int32 *將不起作用,並且需要獲取單個字節並組成int32值。但它可以變得更加棘手,因爲INT32的的字節順序寫入的BSON-BinData是完全一樣的字節順序爲「寫碼」上所運行的計算機體系結構 - 你需要知道的binData再次進行解碼。

您還需要考慮到其他數據類型的數組,鑄造可能無法儘管使用相同的硬件架構工作。例如,在Intel x86/x64平臺的流行操作系統中,數據類型的大小不同:http://software.intel.com/en-us/articles/size-of-long-integer-type-on-different-architecture-and-os