是否有用于创建固定长度基元类型的库

Is there a library for creating fixed length primitive types?

本文关键字:类型 用于 创建 是否      更新时间:2023-10-16

我目前正在用vs2012编写代码,我想在Linux中编译。我想序列化进度并将其保存到文件中,并希望该保存文件可在 32 位和 64 位体系结构以及 Windows 和 Linux 上访问。

我不想使用任何序列化库。

为了实现这一点,我希望有函数可以将类型(即浮点数、双精度、int32 和 int64(有符号和无符号)转换为固定长度和可移植基元,以便在二进制文件中存储和检索。我的理解是,布尔和字符类型在标准中指定,因此已经是可移植的。

性能不是关键,但大小是,所以ASCII在这里不是一个可行的解决方案。例如,如果平台使用的位长度大于我指定的固定长度,反之亦然,我不介意失去一些精度。

由于我是新手,过多地谈论字节序,IEEE等会让我感到困惑和恼火。

我对一个开箱即用的库特别感兴趣,但如果这是实现这一目标的唯一方法,我会考虑推出我自己的转换。

仅供参考,我不想要序列化库,因为 boost 不适用于智能指针,谷物不适用于 VS2012,而Microsoft在 Linux 中不起作用。如果我不得不四处涂鸦才能让这些东西发挥作用,我想我不妨自己做。

有什么想法吗?

编辑:由于我现在已经了解了 boost 序列化库的 c++11 兼容性,我很乐意接受该解决方案。

@ausairman Boost 序列化非常适用于智能指针:

  • 提升序列化和标准::shared_ptr
#include <boost/serialization/shared_ptr.hpp>

示例 (http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/tutorial.html#examples) 显示了这一点。此外,该示例使其看起来像混叠,默认情况下会处理周期。

既然你直截了当地提到字节序和其他可移植性问题会让你感到困惑,我非常衷心地建议你不要自己写这篇文章(除非纯粹是为了学习)。

如果您对不依赖于平台的东西感兴趣,并且会以您希望序列化的相同格式将值存储在内存中,请考虑Cap'n Proto,它与Google的Protobuffers 2.0由同一作者编写。

我不确定是否使用了智能指针,您可能需要重写对象以由 Cap'n 原型结构而不是基元值支持,但这似乎最接近您想要的。

http://kentonv.github.io/capnproto/