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

标签 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 个字节转一次,然后自己将它放入一个数组中?

谢谢

最佳答案

只要您在具有相同字节序的硬件架构上运行代码(在 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/

相关文章:

php - WHOIS API JSON 数组内容

c++ - 嵌套的 std::transform 效率低吗?

c++ - 编译器找不到命名空间

在 Cygwin 软件包列表中找不到 Openssl

C程序判断一个数是否为回文数

C 中能否将一个字符串的一部分复制到另一个字符串上?但复制的开始索引不为零

c++ - 使用 memcpy 和 memset 重新分配数组

c++ - 禁用 typedef 之间的隐式转换

c - 无法在 C 中使用冒泡排序对字符数组进行排序

php - 如何从一个数组中删除不在另一个数组中的键?