所以我正在使用C ++ MongoDB驱动程序进行测试
这是我的测试代码
在代码中我创建一个小整数数组并将其作为二进制文件插入到mongo数据库中。
当我遍历行
时,我用这行代码检索二进制文件mongo::BSONElement array = obj["binTest"];
此时我在这个数组变量中有二进制文件,它是BSONElement类型的。我想将此二进制文件转换回整数数组。可以在api中看到执行此操作的功能
功能标题
const char* mongo::BSONElement::binData (int &len)const
我想运行该函数,以const char *格式获取二进制数据并将其转换为int数组。我可以解决这个问题吗,或者我必须每4个字节一次并将其自己放入一个数组中吗?
由于
答案 0 :(得分:0)
只要您在具有相同endianess的硬件体系结构上运行代码(在PC上它是小端),您可以将检索到的char指针强制转换为int32指针并将其视为int32数组。
但是,如果您想要进行数据交换或跨平台互操作性,那么将数据类型数组视为用于存储/交换目的的字节数组将是一个坏主意。
您需要考虑不同的硬件平台可能具有不同的endianess。在这种情况下,将char指针强制转换为int32 *将不起作用,您需要获取单个字节并组成int32值。但它可能变得更加棘手,因为写入BSON-BinData的int32的endianess与运行'write code'的计算机体系结构完全相同 - 你需要知道再次解码binData。 / p>
您还需要考虑对于其他数据类型的数组,尽管使用相同的硬件架构,但转换可能无法工作。例如, long 数据类型的大小在Intel x86 / x64平台的流行操作系统中是不同的:http://software.intel.com/en-us/articles/size-of-long-integer-type-on-different-architecture-and-os