获取sizeOf(flatbuffers表) 我用C++来使用Flatbuffers。我想在一个结构中创建一个字节数组,该结构的大小与生成的表的大小相同(我将内容作为NanoMSG消息的有效负载发送)

获取sizeOf(flatbuffers表) 我用C++来使用Flatbuffers。我想在一个结构中创建一个字节数组,该结构的大小与生成的表的大小相同(我将内容作为NanoMSG消息的有效负载发送),flatbuffers,Flatbuffers,一个人如何做(桌子)的尺寸 无法直接工作。因为Flatbuffers似乎可以动态设置大小(在我的负载情况下)。没有人有更好的主意,我正在结构中创建一个固定大小的有效负载,然后检查是否超过该值: #define PayloadMax 256 #include "pnt_generated.h" struct packetStruct { Topics topic; int payloadSize; uint8_t payload[PayloadMax]; }; 您可以从

一个人如何做(桌子)的尺寸


无法直接工作。

因为Flatbuffers似乎可以动态设置大小(在我的负载情况下)。没有人有更好的主意,我正在结构中创建一个固定大小的有效负载,然后检查是否超过该值:

#define PayloadMax 256
#include "pnt_generated.h"

struct packetStruct {
    Topics topic;
    int payloadSize;
    uint8_t payload[PayloadMax];
};

您可以从bufferbuilder获取有效负载的大小:

flatbuffers::FlatBufferBuilder(1024)
auto l=CreateLogEvent(builder,builder.CreateString(“INFO”)、builder.CreateString(“main.c”)、builder.CreateString(“测试日志条目”); FinishLogEventBuffer(生成器,l); auto ptr=builder.GetBufferPointer(); auto size=builder.GetSize();
<或>代码> < / P>这可能有一些关于C++中的信息,你不能声明可变大小的数组(FlatBuffer不是预先已知的固定大小)。请注意,您可以在FlatBuffers中创建大小前缀缓冲区。因此,您不必尝试在自己的结构中封装FlatBuffer,而是可以对所有结构使用FlatBuffers。@Aardappel我需要将其封装在数据包中,因为我正在使用ZeroMQ的一个变体将其发布到网络上,数据包的第一个字节是通道/主题。剩下的是负载,它是Flatbuffers。您可以保留std::vector而不是数组。。结构数据包{Topics topic;int pSize;std::vector payload(sizeof(pnt));},它不能帮助获得通道主题作为第一个字节的连续内存块
#define PayloadMax 256
#include "pnt_generated.h"

struct packetStruct {
    Topics topic;
    int payloadSize;
    uint8_t payload[PayloadMax];
};