【发布时间】:2017-11-27 16:02:34
【问题描述】:
我正在尝试序列化字节流中的结构。基本上,我必须使用这种类型的结构:
typedef struct {
unsigned a, b;
unsigned c, d;
} struct_t;
我必须将此结构的元素转换为字符串的字符。例如,我得到以下内容:
struct_t *structure; /* pointer to the structure due to be converted */
char *s; /* array of char where to write the string result of the conversion */
int len; /* lenght of the array s */
我在理解如何通过序列化来做到这一点时遇到了一些问题。 提前感谢您的帮助。
【问题讨论】:
-
看来您需要将结构的内容转换为可打印的字符串。想出一个格式,用
snprintf写字符串。 -
序列化的数据会用到哪里?你想要多大的灵活性?有无穷无尽的可能性——而且它们大多非常简单。你需要标记开始和结束吗?
snprintf(buf, len, "[%u,%u,%u,%u]", structure->a, structure->b, structure->c, structure->d)可能就足够了(如果您检查输出没有被截断 - 捕获并测试来自snprintf()的返回值)。 -
wikipedia 很好地解释了序列化。现在我会远离 XML,而是使用 JSON 库(网络上到处都在讨论优缺点)。
-
当心只是通过将其转换为字节指针来进行序列化。如果您最终在具有不同字节序的系统上读回数据,您可能会遇到字节序问题。
-
我要做的是实现一个函数,其标题如下:
char * struct_to_string (struct_t* structure, char* s, int len);这个函数将结构表示为字符串。如果转换成功,\retval 必须为 s,否则 \retval 必须为 NULL。我正在开发一个项目,该项目需要将字符串(称为字符串 [i])转换为结构(完成,它工作正常),然后再次将此结构转换为新字符串,这显然是与string[i]基本相同。
标签: c arrays string serialization structure