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