在Protobuf中,赋值语句根据消息内容的类型有所不同,以下是详细的赋值方式:
简单(非嵌套)消息内容的赋值
对于简单的消息内容,可以直接使用set_
方法进行赋值。
vehicle_heartbeat.set_vehicle_speed(1.2);
嵌套消息内容的赋值
对于嵌套的消息内容,不能直接使用set_
方法,而需要采用set_allocated_
或mutable_
方法,这两种方法的赋值方式有所不同:
1、使用set_allocated_
:
赋值的对象需要通过new
操作符创建,因为这里使用的是对象的指针。
当局部的对象被销毁后,如果仍然持有该对象的指针,会导致错误。
示例:
```cpp
PointLLHA *point = new PointLLHA;
point->set_longitude(116.20);
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