将常量字符* 类型转换为 int 数组

Convert const char* type to int array

本文关键字:int 数组 类型转换 常量 字符      更新时间:2023-10-16

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

谢谢

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

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

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

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