如何在 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);
}
我在 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);
}