c++ 读取protobuf
时间: 2023-07-06 13:43:20 浏览: 71
要读取 Protobuf 格式的数据,需要先定义好对应的 .proto 文件,然后使用 Protobuf 提供的库来解析数据。以下是一个简单的 C++ 代码示例:
```cpp
#include <fstream>
#include <iostream>
#include "person.pb.h" // 根据 .proto 文件生成的头文件
using namespace std;
int main() {
// 读取二进制数据
fstream input("person.dat", ios::in | ios::binary);
Person person;
person.ParseFromIstream(&input);
// 输出解析结果
cout << "Name: " << person.name() << endl;
cout << "Age: " << person.age() << endl;
for (int i = 0; i < person.phone_size(); i++) {
const Person::PhoneNumber& phone_number = person.phone(i);
cout << "Phone: " << phone_number.number() << endl;
}
return 0;
}
```
其中,`person.pb.h` 是根据下面的 `.proto` 文件生成的:
```protobuf
syntax = "proto3";
message Person {
string name = 1;
int32 age = 2;
repeated PhoneNumber phone = 3;
message PhoneNumber {
string number = 1;
string type = 2;
}
}
```
在代码中,我们打开一个二进制文件,然后使用 `ParseFromIstream` 函数将数据解析为 `Person` 对象。解析后,我们可以通过访问 `Person` 对象的成员函数和属性来获取数据。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)