C++ Flatbuffers如何发送一条消息uint16\u t头、大小\u t正文大小和uint8\u t缓冲区

C++ Flatbuffers如何发送一条消息uint16\u t头、大小\u t正文大小和uint8\u t缓冲区,c++,boost-asio,flatbuffers,C++,Boost Asio,Flatbuffers,我在用, 我想按以下顺序形成一条消息: uint16_t头标识符。(固定大小消息) 大小与体型你不需要1)和2)。要获得1),请在架构中声明一个文件\u标识符,然后将该标识符传递给Finish。要获得一个2)字符,请使用FinishSizePrefixed。所有这些都在你仍然不想阅读的文档中 再说一次,这是一种二进制格式,所以我不确定你在用std::to_string做什么,但它不起作用。您只需要编写buf的内容。我不知道如何在Boost中使用它。而且我知道我可以像这样设置文件标识符auto a

我在用,

我想按以下顺序形成一条消息:

  • uint16_t头标识符。(固定大小消息)
  • 大小与体型你不需要1)和2)。要获得1),请在架构中声明一个
    文件\u标识符
    ,然后将该标识符传递给
    Finish
    。要获得一个2)字符,请使用
    FinishSizePrefixed
    。所有这些都在你仍然不想阅读的文档中


    再说一次,这是一种二进制格式,所以我不确定你在用
    std::to_string
    做什么,但它不起作用。您只需要编写
    buf
    的内容。我不知道如何在Boost中使用它。

    而且我知道我可以像这样设置文件标识符
    auto accountRole=Vibranium::CreateAccountRole\u Packet(builder,1,name);const char*HEADER=“ABCD”;FinishSizePrefixed(accountRole,HEADER)
    但是,我如何首先检查索引器,以便知道以哪种格式解码?是否有获取缓冲区标识符的一般方法?我发现,一旦我使用flatc生成了类似于
    *AccountRole\u PacketIdentifier()
    的函数,但这仅适用于该表。如果我有很多,服务器应该使用它们的标识符来知道确切的类型,那该怎么办?你在浪费时间,你必须在尝试直接进入“平面缓冲区”之前学习,我打赌在理解asio之后,你会发现你不需要平面缓冲区…@JeanDavy为什么?Boost Asio是一个在另一端提供网络解决方案的库,FlatBuffers为消息的序列化/反序列化提供了方便的方式。为什么Boost Asio会使扁平缓冲变得不必要?“Boost Asio为什么……”这正是你必须学习Asio的原因!
    size_t const header_length = 8;
    size_t const body_size_b = 8;
    
    ServerOpcode opc;
    opc = ServerOpcode::SMSG_LOGIN_REQUEST_RESPONSE_TEST;
    std::string header = std::to_string(opc);
    flatbuffers::FlatBufferBuilder builder;
    auto name = builder.CreateString("Orc MONSTER");
    auto accountRole = Vibranium::CreateAccountRole_Packet(builder,1,name);
    builder.Finish(accountRole);
    size_t size = builder.GetSize();
    uint8_t *buf = builder.GetBufferPointer();
    
    std::array<char, header_length + body_size_b> buffer{};
    std::copy(header.begin(), header.end(), buffer.begin());
    std::copy(std::to_string(size).begin(), std::to_string(size).end(), buffer.begin() + header_length);
    // How can I add builder here at third place ?
    boost::asio::write(s, boost::asio::buffer(buffer,sizeof(buffer)));