如何从平面缓冲区中反序列化联合结构的 void* 值的大小
How to get the size of union struct's void* value deserializes from flatbuffers
我正在使用平面缓冲区来反序列化包含联合结构的数据,例如
struct ReqMsgUnion {
ReqMsg type;
void *value;
}
图式:
table Request {
seq_no: uint = 0;
msg: ReqMsg (required);
}
现在我想使用 memcopy() 来复制"值",但我无法获得正确的"值"大小,因为里面有一些"\0"(如果我没记错的话)。 我在互联网上搜索并找到类似"在架构中添加数据长度"的方法,但我想知道是否有其他更好的想法。 谢谢!
无法从void*
中提取它指向的大小(或其实际类型)。该信息(如果需要)必须以其他方式明确包含。
尽量不要在C++首先使用void*
。
你的问题有点不清楚,似乎struct
来自 C/C++ 代码,table
来自 FlatBuffer 模式。它们不是同一种语言。
现在首先,您通常不能从 FlatBuffer 中复制任何内容。从 API 获取的任何内容,无论是联合还是表指针,都指向基础缓冲区中的某个位置,并且其大小未知。它可能指向缓冲区中在内存中不相邻的其他项。
在 flatBuffers API 中,你会得到一个void *
,因为它可能指向多个不相关的表类型。您应该使用您获得的类型将其强制转换为实际的表类型。但就像我说的,即使你做了,你仍然无法复制它。
相关文章:
- 奇怪的结构&GCC&clang(void*返回类型)
- 取消引用 void 指针以将值分配给结构
- 为什么将函数的返回类型从结构节点*更改为void后,链表的元素没有显示create_ll和显示?
- 结构新手,我对如何从 void 函数中返回值并将其放入另一个函数感到困惑
- 将指针传递到结构,与传递 void 指针并强制转换为结构
- 如何从平面缓冲区中反序列化联合结构的 void* 值的大小
- 用于初始化结构的 void 指针强制转换
- 访问由 void 指针引用的结构的成员
- 将数据读入结构中的 void* 变量
- 如何转换 void* 以访问结构的静态数据成员?
- 这个结构是什么:"void dot::print(void){"?
- 英特尔SGX将c++类/结构作为void*传递到飞地并将其强制转换回
- 如何在 c++ 结构中的 void* 变量中调用存储函数(回调)
- C++中带有 void* 的结构的内存分配
- 似乎无法在 c++ 中将 void* 转换为结构
- 同时在 epoll 数据结构中使用 void *ptr 和 int fd
- 如何从 void 指针将属性访问到结构中
- 在将 void 指针转换为结构时获取值时遇到问题
- 使用shared_ptr<void>初始化结构
- 包含void*结构的函数的Const正确性和形参