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

时间:2013-09-17 23:43:31

标签: c++

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

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

为了实现这一点,我想拥有可以转换和检索类型的函数,即float,double,int32和int64(有符号和无符号)到固定长度和可移植的原语,以便在二进制文件中存储和检索。我的理解是bool和char类型在标准中指定,因此已经可移植。

性能并不重要但尺寸不大,因此ASCII不是一个可行的解决方案。我不介意失去一些精度,例如,如果平台使用的比特长度大于我指定的固定长度,反之亦然。

由于我是一篇关于字节序的新闻,IEEE等会让我感到困惑和烦恼。

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

仅供参考我不想使用序列化库,因为boost不适用于智能指针,谷歌不能与VS2012一起使用,而且Microsoft不能在Linux中运行。如果我不得不四处乱涂乱让这些东西上班,我想我也可以自己做。

有什么想法吗?

编辑,因为我现在已经学习了升级序列化库的c ++ 11兼容性,我很乐意接受这个解决方案。

2 个答案:

答案 0 :(得分:3)

@ausairman提升序列化非常 使用智能指针:

#include <boost/serialization/shared_ptr.hpp>

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

既然你提到了endianness和其他可移植性问题让你感到困惑的话,我非常衷心地建议你不要自己写这个(除非它纯粹是为了学习的目的)。

答案 1 :(得分:3)

如果您对非平台相关的内容感兴趣,并且会将您的值存储在内存中,并且格式与您希望序列化相同,请考虑Cap'n Proto,它由与Google的Protobuffers 2.0相同的作者编写。< / p>

我不确定是否使用了智能指针,你可能不得不重写你的对象以供Cap'n proto结构而不是原始值支持,但这似乎最接近你想要的。

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