c++ - C/C++ 中 union 数组的序列化/反序列化

标签 c++ c serialization

使用字符串和基本整数序列化/反序列化 union 数组的最佳方法是什么?

例如,我们要序列化:

union val_u {
int i;
char *s;
}

void serialize(void *buffer, const char *format, const union val_u src[]);
void deserialize(union val_u dst[], const char *format, const void *buffer);

union 数组的任意组合表示为 格式字符串的内容:'i'表示整数 而's'表示一个字符串。 Serialize() 将 src 的内容与 union 成员一起复制 将如上所述的格式表示的类型放入缓冲区中。 deserialize() 将缓冲区的内容复制到 dst 中 由格式表示的 union 成员类型。从字面上看,它是 Serialize() 函数的逆操作。

格式只是一个用于标识的字符串(任意)

知道如何实现这些功能吗?另外,如何使其跨架构可移植?

谢谢!

最佳答案

最简单的方法是将所有内容打印为其字符串表示形式。不进行任何二进制表示,您不必担心表示、对齐或填充。

然后只需使用字符串到整数函数(atoi 等)即可将它们返回到反序列化例程中的数字表示形式。

这不是最有效的做事方式,但这通常不是最重要的事情。首先,把事情做好是最重要的。然后,如果它还不够好,就担心如何改进它。

iThis is a string
n234234
n8292
iMore Stuff
n-92

我认为这就是您所说的,它应该对您有用。

关于c++ - C/C++ 中 union 数组的序列化/反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16632208/

相关文章:

java - 实现保存和恢复对象属性状态的最佳方式

c++ - 使用多态存档 boost 序列化

c++ - 如何编写一个程序来计算这个等式

c++ - 目前在 Ubuntu C/C++ 中如何将 IANA 时区名称转换为 UTC 偏移量

c - realloc 函数不会在 c 中保存具有新值的新元素

Java Serialized - 序列化/反序列化是否安全?

c++ - 将项目拆分为库和应用程序

c++ - 如何将 dll 添加到 VC++ 2008 项目

c++ - 您如何将该C++程序转换为C程序?

c# - 元组的 Json 反序列化问题?