0

0

C++怎么使用Protobuf进行序列化_C++集成Google Protocol Buffers进行数据交换

冰火之心

冰火之心

发布时间:2025-12-09 13:42:41

|

974人浏览过

|

来源于php中文网

原创

首先定义.proto文件描述数据结构,再用protoc生成C++代码,接着在项目中包含头文件并调用SerializeToOstream和ParseFromIstream实现序列化与反序列化,最后通过正确配置编译环境完成集成。

c++怎么使用protobuf进行序列化_c++集成google protocol buffers进行数据交换

在C++项目中使用Protobuf(Protocol Buffers)进行序列化和数据交换,是高效处理结构化数据的常见做法。Google Protocol Buffers 提供了跨平台、跨语言的数据序列化能力,特别适合网络通信和持久化存储。下面是完整的使用流程和代码示例。

定义.proto文件

首先需要编写一个.proto文件来描述你要序列化的数据结构。例如,创建一个名为person.proto的文件:

syntax = "proto3";
package example;

message Person {
  string name = 1;
  int32 age = 2;
  string email = 3;
}

这个文件定义了一个名为Person的消息类型,包含姓名、年龄和邮箱字段。

生成C++代码

使用protoc编译器将.proto文件编译为C++头文件和源文件:

立即学习C++免费学习笔记(深入)”;

protoc --cpp_out=. person.proto

执行后会生成两个文件:person.pb.hperson.pb.cc。这些文件包含了自动生成的C++类,可以直接在项目中使用。

在C++中序列化与反序列化

包含生成的头文件,并使用Protobuf API进行序列化和反序列化操作。

音剪
音剪

喜马拉雅旗下的一站式AI音频创作平台,强大的在线剪辑能力,帮你轻松创作优秀的音频作品

下载

序列化示例:

#include "person.pb.h"
#include stream>

int main() {
  example::Person person;
  person.set_name("张三");
  person.set_age(30);
  person.set_email("zhangsan@example.com");

  // 序列化到文件
  std::ofstream output("person.bin", std::ios::binary);
  if (!person.SerializeToOstream(&output)) {
    return -1;
  }
  return 0;
}

反序列化示例:

#include "person.pb.h"
#include

int main() {
  example::Person person;
  std::ifstream input("person.bin", std::ios::binary);
  if (!person.ParseFromIstream(&input)) {
    return -1;
  }

  // 输出读取的数据
  std::cout   std::cout   std::cout
  return 0;
}

集成到C++项目中

要让项目正确编译和链接Protobuf,需确保以下几点:

  • 安装Protobuf开发库(如Ubuntu下:sudo apt-get install libprotobuf-dev protobuf-compiler)
  • 在编译时包含Protobuf头文件路径
  • 链接libprotobuf

使用g++编译的命令示例:

g++ -I/usr/include -c person.pb.cc
g++ -I/usr/include -c main.cpp
g++ -o app person.pb.o main.o -lprotobuf

如果使用CMake,可添加:

find_package(Protobuf REQUIRED)
target_link_libraries(your_target ${PROTOBUF_LIBRARIES})

基本上就这些。只要定义好协议文件,生成代码,再调用SerializeToOstream或ParseFromIstream就能完成数据交换。Protobuf的优势在于体积小、速度快、支持多语言,非常适合服务间通信或配置文件存储。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

318

2023.08.02

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

751

2023.08.22

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

318

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

538

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

53

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

197

2025.08.29

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

535

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

17

2025.12.22

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 7.1万人学习

C 教程
C 教程

共75课时 | 4.1万人学习

C++教程
C++教程

共115课时 | 12.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号