我正在尝试将混合数据读入C结构
通常,我会做这样的事情typedef struct data {
uint32_t value;
float x,y,z;
} __attribute__((__packed__));
并按如下方式阅读:
data x;
fread(&x, 1, sizeof(data), filePointer);
这对于固定长度的数据来说效果很好,但是,我需要加载一个ASCIIZ字符串,它是可变长度的,我想知道是否有一种简单的方法可以将它读入结构
答案 0 :(得分:1)
很抱歉,但没有针对C. This has been asked on SO before with some very good answers的内置序列化。
如果这不能满足您的需求,请在您最喜爱的搜索引擎中搜索C serialize
或C serialization
。
答案 1 :(得分:1)
有两种方法可以将ASCIIZ字符串存储在结构中,例如:
struct asciiz_1
{
char asciiz[32];
};
struct asciiz_2
{
size_t buflen;
char *buffer;
};
第一个(struct asciiz_1
)的处理方式与struct data
相同;即使字符串在null(零)字节之后可能具有可变长度的垃圾,整个结构也是固定大小,可以使用fread()
和fwrite()
安全处理。
第二个(struct asciiz_2
)是一个失败的原因。你必须分配额外的空间来接收字符串(大概是在读取长度之后),并且指针值不应该写入文件(它对读取过程没有任何意义)。所以,你必须以不同的方式处理它。
您的数据结构 - 您的选择。