1

所以我正在使用 C++ MongoDB 驱动程序进行测试

这是我的测试代码

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 个字节去一次并自己将它放入一个数组中?

谢谢

4

1 回答 1

0

只要您在具有相同字节序的硬件架构上运行代码(在 PC 上是小字节序),您就可以将检索到的 char 指针转换为 int32 指针并将其视为 int32 数组。

但是,如果您考虑到数据交换或跨平台互操作性,那么将数据类型的数组视为字节数组用于存储/交换目的将是一个坏主意。

您需要考虑不同的硬件平台可能具有不同的字节顺序。在这种情况下,将 char 指针转换为 int32* 将不起作用,您需要获取各个字节并组合 int32 值。但它可能变得更加棘手,因为写入 BSON-BinData 的 int32 的字节序与运行“编写代码”的计算机体系结构完全相同 - 你需要知道它才能再次解码 binData。

您还需要考虑,对于其他数据类型的数组,尽管使用相同的硬件架构,强制转换可能不起作用。例如,数据类型的大小在英特尔 x86/x64 平台的流行操作系统中是不同的:http: //software.intel.com/en-us/articles/size-of-long-integer-type-在不同的架构和操作系统上

于 2013-10-18T03:56:54.240 回答