如何在 google protobuf 中编码和解码向量

How to encode and decode vector in google protobuff

我在 main.cpp

中有以下结构
typedef struct s1
{
    uint8 plmn[3];
}tai_s;

typedef struct s2
{
    tai_s tai;
}tailist_s;

std::vector<tailist_s> tallist;

我在 main.proto

中有以下结构
message tai_s
{
    google.protobuf.BytesValue plmn[3];
}

message tailist_s
{
    tai_s tai;
}

repeated tailist_s tallist;

我正在尝试像下面这样对 protobuff 进行编码,

for(int i1=0; i1<tailist.size(); i1++)
{
    const tailist_s *tailistproto = proto->add_tailist();

    tailistproto->mutable_tai()->mutable_plmn()->set_value(tailist.tai.plmn, 3);
}

我正在尝试像下面这样解码 protobuff,

for(int i1=0; i1<proto->tailist_size(); i1++)
{
   mempy(tailist.tai.plmn, proto->tailist(i1).tai().plmn().value(), 3);
}

但它在 memcpy 期间出现分段错误。请让我知道我做错了什么。

for(int i1=0; i1<proto->tailist_size(); i1++)
{
   mempy(tailist.tai.plmn, proto->tailist(i1).tai().plmn().value(), 3);
}

您正在尝试解码矢量。那个向量在哪里?您在哪里创建您要写信给的尾巴?您没有将 tailist 添加到向量并在每次迭代中覆盖它。

这应该是这样的:

std::vector<tailist_s> tallist(proto->tailist_size());
for(int i1=0; i1<proto->tailist_size(); i1++)
{
    mempy(&tallist[i1].tai.plmn, proto->tailist(i1).tai().plmn().value(), 3);
}