是否有用于创建固定长度基元类型的库
Is there a library for creating fixed length primitive types?
我目前正在用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/
- 具有多个模板的模板函数,用于特定数据类型(如字符串)?
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 为什么 std::lerp 不适用于任何已实现所需操作的类型?
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 用于检测函数类型是否为否的特征
- Clang 工具,用于提取给定 lambda 类型的 lambda 主体
- C++中是否有用于长数据类型的 lower_bound() 函数?
- 用于随机数据访问的最有效文件类型
- 用于C++代码的 API 监视器类型定义 (XML)
- "const wchar_t *" 类型的值不能用于初始化类型 "const PWSTR" 的实体
- 矢量类型规范中的星号用于什么?
- 与不同变量类型相比,用于变量的 Clang AST 匹配器
- C 元组类型用于功能参数类型
- 哪种数据类型用于存储文件名和文件大小的使用
- 什么C++类型用于最快的"for cycles"?
- 错误:T没有命名类型-用于使用强类型枚举的专门化
- 如何将MPI派生的数据类型用于三维数组
- 无法从C++代码中检索正确的字符串.是否有一种通用类型用于处理c#上的无符号字符*
- 模板中定义的类型用于定义类的模板方法
- 哪种数据类型用于C#中的无符号字符