将const char *类型转换为int数组

时间:2013-10-18 02:54:29

标签: c++ c arrays mongodb

所以我正在使用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个字节一次并将其自己放入一个数组中吗?

由于

1 个答案:

答案 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