如何正确使用Protobuf进行赋值操作?

在Protobuf中,赋值语句根据消息内容的类型有所不同,以下是详细的赋值方式:

简单(非嵌套)消息内容的赋值

如何正确使用Protobuf进行赋值操作?插图1
(图片来源网络,侵删)

对于简单的消息内容,可以直接使用set_方法进行赋值。

vehicle_heartbeat.set_vehicle_speed(1.2);

嵌套消息内容的赋值

对于嵌套的消息内容,不能直接使用set_方法,而需要采用set_allocated_mutable_方法,这两种方法的赋值方式有所不同:

1、使用set_allocated_

赋值的对象需要通过new操作符创建,因为这里使用的是对象的指针。

如何正确使用Protobuf进行赋值操作?插图3
(图片来源网络,侵删)

当局部的对象被销毁后,如果仍然持有该对象的指针,会导致错误。

示例:

```cpp

PointLLHA *point = new PointLLHA;

point->set_longitude(116.20);

如何正确使用Protobuf进行赋值操作?插图5
(图片来源网络,侵删)

point->set_latitude(39.56);

vehicle_heartbeat.set_allocated_vehicle_pose(point);

```

2、使用mutable_

赋值时可以使用局部变量,因为在调用mutable_时,内部会执行new操作。

示例:

```cpp

PointLLHA point;

point.set_longitude(116.20);

point.set_latitude(39.56);

vehicle_heartbeat.mutable_vehicle_pose()->CopyFrom(point);

```

重复消息内容的赋值

对于带有repeated字段的消息,可以通过add_方法依次添加元素。

// 第一个点
PointLLHA *way_point = vehicle_routing_info.add_way_points();
way_point->set_longitude(116.20);
way_point->set_latitude(39.56);
// 第二个点
way_point = vehicle_routing_info.add_way_points();
way_point->set_longitude(116.21);
way_point->set_latitude(39.57);

Python中的赋值方式

在Python中,赋值方式与C++类似,但语法有所不同。

import test_pb2 as pb
search_service = pb.SearchService()
search_service.type = "request"
search_service.id = 1
search_service.searchRequest.content = "hello protobuf!"
search_service.searchRequest.keyword = "mk"

对于被repeated修饰的字段,可以将其视为一个空列表,通过append方法添加值:

uid = search_service.uid
uid.append(1)
uid.append(2)

Protobuf中的赋值语句根据消息内容的类型和编程语言的不同而有所差异,但基本原理是一致的。

本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/59016.html

小末小末
上一篇 2024年9月25日 05:35
下一篇 2024年9月25日 05:45

相关推荐