我正在使用FlatBuffers反序列化包含联合结构之类的数据
struct ReqMsgUnion {
ReqMsg type;
void *value;
}
模式:
table Request {
seq_no: uint = 0;
msg: ReqMsg (required);
}
现在,我想使用memcopy()复制“值”,但是由于内部有一些“ \ 0”(如果我没记错的话),我无法获得“值”的正确大小。 我在Internet上搜索并找到了“在架构中添加dataLength”之类的方法,但是我想知道是否还有其他更好的主意。 谢谢!
答案 0 :(得分:3)
没有办法从void*
中提取其指向的大小(也不包括其 actual 类型)。该信息(如果需要)必须以其他方式明确包含。</ p>
在C ++中,一开始不要尝试使用void*
。
答案 1 :(得分:0)
您的问题还不清楚,似乎struct
来自C / C ++代码,而table
来自FlatBuffer模式。它们是不同的语言。
现在,首先,您通常无法从FlatBuffer复制任何内容。您从API获得的任何信息,无论是联合还是表指针,都指向基础缓冲区中的某个位置,并且其大小未知。它可能指向缓冲区中不相邻的其他项。
在flatBuffers API中,您将获得一个void *
,因为它可能指向多个不相关的表类型。您应该使用将其转换为实际表类型的类型。但是就像我说的,即使您这样做了,也仍然无法复制。