protobuf,c++进行嵌套消息的赋值

待改写的结构体:三层嵌套

using namespace std;

namespace A{
namespace B{
namespace C{
namespace D {

struct E2E
{
    uint64 CRC;
    uint32 Length;
};

struct IPC_HEADER
{
    E2E e2e;
    uint64 counter;
};

struct Header
{
    int64 seq; 
    uint64 stamp; 
};

struct ABC
{
    uint8 ifc_line01_type; 
    uint8 ifc_line02_type; 
};


struct HmiOutput
{
    Header header; 
    ABC land_ass_sys; 
};

struct Struct{
    IPC_HEADER          ipc_header;
    HmiOutput           hmi_output;
};

}//end of namespace D
}//end of namespace C
}//end of namespace B
}//end of namespace A

对应的proto文件:

syntax = "proto3";
package A.B.C.D;

message StructPb{
    message IPC_HEADER{
        message E2E{
            uint64 CRC=1;
            uint32 Length=2;
        }
        E2E e2e=1;
        uint64 counter=2;
    }

    message HmiOutput{
        message Header{
            int64 seq=1; 
            uint64 stamp=2; 
        }

        message ABC{
            uint32 ifc_line01_type=1; 
            uint32 ifc_line02_type=2; 
        }
        Header header=1; 
        ABC=2; 
    }

    IPC_HEADER          ipc_header=1;
    HmiOutput           hmi_output=2;
}

对应的部分赋值代码:

可以对应着生成的pb.h文件找,赋值语句和类名都是对应的。

//先创建对象,供后面使用
A::B::C::D::StructPb my_structpb;
A::B::C::D::StructPb_IPC_HEADER ipc_header;
A::B::C::D::StructPb_IPC_HEADER_E2E e2e;

e2e.set_crc(CRC);
e2e.set_length(Length);

ipc_header.mutable_e2e()->CopyFrom(e2e);
ipc_header.set_counter(counter);

//...

my_structpb.mutable_ipc_header()->CopyFrom(ipc_header);
my_structpb.mutable_hmi_output()->CopyFrom(hmioutput);
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值