我怎样才能得到 flatbuffers 二进制文件中字段的偏移量?

How could I get offset of a field in flatbuffers binary file?

我正在使用一个库,这个库要求我提供文件中所需数据的偏移量,所以它可以使用 mmap 读取数据(我不能编辑这个库的代码,但只能提供偏移量)。

所以我想使用 flatbuffers 来序列化我的整个数据,因为 flatbuffers 中没有任何打包和解包,(我认为)这意味着很容易获得二进制文件中所需部分的偏移量.

但我不知道如何获得偏移量。我尝试加载二进制文件并计算所需字段的指针偏移量,例如根地址为1111,所需字段的地址为1222,因此该字段在二进制文件中的偏移量为1222 - 1111 = 111(因为没有拆包步骤)。但实际上,指针的偏移量是一个巨大的负数。

有人可以帮我解决这个问题吗?提前致谢!

FlatBuffers确实很适合mmap。没有要计算的偏移量,因为生成的代码会为您完成所有这些工作。你应该简单地 mmap 整个 FlatBuffers 文件,然后像往常一样使用字段访问器,从 auto root = GetRoot<MyRootType>(my_mmapped_buffer) 开始。如果您想获得指向更大字段(例如字符串或向量)中数据的直接指针,再次简单地使用提供的 API: root->my_string_field()->c_str() 例如(它将指向您的映射缓冲区内部).