首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flatbuffers::Table*到buffer_pointer

flatbuffers::Table*到buffer_pointer
EN

Stack Overflow用户
提问于 2019-07-16 13:15:02
回答 1查看 471关注 0票数 0

考虑一下这个场景。我正在使用CreateXXX生成的代码创建一个结构(flatbuffers::Table)。这将在FlatBuffer缓冲区上创建结构,并给出偏移量。然后,我可以使用GetBufferPointer()获取内存块并将其传输。相反,如果我得到一个内存块,我可以使用GetXXX从它获得我的结构(flatbuffers::Table)。

但是在我得到这个结构之后,如果我需要再次序列化它,我该怎么做呢?序列化之后,我应该能够像以前一样传输该数据并对该数据执行GetXXX。

代码语言:javascript
复制
flatbuffers::Parser parser;
parser.Parse(schema.c_str());
parser.SetRootType("license");
parser.Parse(j.c_str());

auto* buf = parser.builder_.GetBufferPointer();
auto li = flatbuffers::GetRoot<license>(buf);

std::cout << "ID: " << li->id()->c_str() << " Rand: " << li->rand()->c_str() << " Secret: " << li->secret()->c_str() << std::endl;

uint8_t* buf2 = ????????????
auto li2 = flatbuffers::GetRoot<license>(buf2);

std::cout << "ID: " << li2->id()->c_str() << " Rand: " << li2->rand()->c_str() << " Secret: " << li2->secret()->c_str() << std::endl;
EN

回答 1

Stack Overflow用户

发布于 2019-07-16 13:36:51

显而易见的答案是,您可以保留原始的缓冲区指针(和大小)。然后你可以通过写出现有的缓冲区来“重新序列化”它。

如果您确实必须只使用根目录(在您的示例中为li),则有一个函数GetBufferStartFromRootPointer

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57050428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档