C++ protobuf
Date: 2021-10-23Last modified: 2024-11-02
Table of contents
Prototype
syntax = "proto2";
message Sensor {
required string name = 1;
required double temperature = 2;
required int32 humidity = 3;
enum SwitchLevel {
CLOSED = 0;
OPEN = 1;
}
required SwitchLevel door = 5;
}
Makefile
GRPC_CPP_PLUGIN = grpc_cpp_plugin
GRPC_CPP_PLUGIN_PATH ?= `which $(GRPC_CPP_PLUGIN)`
%.grpc.pb.cc: %.proto
protoc --grpc_out=. --plugin=protoc-gen-grpc=$(GRPC_CPP_PLUGIN_PATH) $<
%.pb.cc: %.proto
protoc --cpp_out=. $<
Fill the object parameters.
Sensor sensor;
sensor.set_name("Laboratory");
sensor.set_temperature(23.4);
sensor.set_humidity(68);
sensor.set_door(Sensor_SwitchLevel_OPEN);
Serialize to a file
ofstream ofs("sensor.data", std::ios_base::out | std::ios_base::binary);
sensor.SerializeToOstream(&ofs);
ofs.close();
Parse parameters from file
Sensor sensor2;
ifstream ifs("sensor.data", ios_base::in | ios_base::binary);
sensor2.ParseFromIstream(&ifs);
cout << "Temperature: " << sensor2.temperature() << endl;
cout << "Humidity: " << sensor2.humidity() << endl;
cout << "Door: " << sensor2.door() << endl;
Possible output
Temperature: 23.4
Humidity: 68
Door: 1