从构造的 Flatbuffer 访问字段值原始字节

Access field value raw bytes from a constructed Flatbuffer

假设我将以下 Flatbuffer 定义编译为 C++。

table ParentObj { // this is the root table
    timestamp:uint64;
    child:ChildObj
}

table ChildObj {
    ...some fields...
}

我使用 Flatbuffer 构建器构建了一个 ParentObj(其中包括 ChildObj),并通过网络将最终字节发送给另一方。 有没有办法让接收方可以访问接收缓冲区中构成 ChildObj 的原始字节?我可以通过 Flatbuffer 生成的 C++ 代码接口访问子对象中的各个字段。但是我能得到组成整个 ChildObj 对象的字节的缓冲区偏移量和长度吗?我需要它来生成 ChildObj 字节的加密签名。

否,因为 ChildObj 在缓冲区中不一定是连续的。它引用一个 vtable(可能共享也可能不共享),任何 sub-string/vector/table 是一个偏移量,可能指向缓冲区的非相邻部分。

通常,您使用 nested_flatbuffer 来存储需要被视为自己的独立缓冲区的子项:child:[ubyte] (nested_flatbuffer: ChildObj).

但是,从中获取加密签名仍然是一个坏主意,因为根据它的序列化方式(哪个实现),由于 fields/objects 的对齐和排序不同,字节可能会略有不同。要可靠地从中获取哈希值,您只需要具有实际的数据字节,并且采用固定的字段顺序。