Protobuf的基础使用

可以在vscode上安装插件vscode-proto3以便识别proto文件

创建一个.proto文件

创建test.proto文件,使用Protobuf语法来描述你想要序列化的数据结构。这个文件是文本格式,包含了你想要序列化的数据的结构定义。

syntax = "proto3"; //声明protobuf版本

package fixbug; //声明了代码所在的包(对于cpp来说是namespace)

//定义登录请求消息类型  它有两个字段name pwd,每个字段都有一个唯一的编号,这个编号在二进制格式中用于识别字段,并且一旦定义就不能更改。

message LoginRequest

{

bytes name = 1;

bytes pwd = 2;

}

//定义登录响应消息类型

message LoginResponse

{

int32 errcode = 1;

bytes errmsg = 2;

bool success = 3;

}

编译.proto文件(以C++为例)

protoc编译器支持多种编程语言,如C++、Java、Python等。可以使用 protoc 查看里面的命令,选择需要的编程语言

protoc test.proto --cpp_out=./

这个命令会在当前目录下生成一个C++的头文件(.h)和一个源文件(.cc),其中包含了根据.proto文件定义的数据结构生成的类。

定义源代码

main.cc

#include "test.pb.h"

#include <iostream>

#include <string>

using namespace fixbug;

int main()

{

//封装login请求对象的数据

LoginRequest req;

req.set_name("Jenny");

req.set_pwd("123456");

//对象数据序列化 -> char*

std::string send_str;

if(req.SerializeToString(&send_str))

{

std::cout << send_str << std::endl;

}

//从send_str反序列化一个login请求对象

LoginRequest reqB;

if(reqB.ParseFromString(send_str))

{

std::cout << reqB.name() << " " << reqB.pwd() << std::endl;

}

return 0;

}

编译

g++ main.cc test.pb.cc `pkg-config --cflags --libs protobuf`

./a.out

使用 pkg-config --cflags --libs protobuf 来获取编译和链接标志时,pkg-config 工具会根据 Protobuf 的安装位置和配置自动生成正确的编译器和链接器标志。这些标志包括必要的头文件路径(通过 --cflags)和库文件路径及名称(通过 --libs),从而确保编译器和链接器能够找到并正确使用 Protobuf 库。

PS:

  • 字段编号:在.proto文件中定义的每个字段都需要一个唯一的编号。这个编号在序列化后的数据中用于识别字段,因此一旦定义就不能更改。
  • 数据类型:Protobuf支持多种数据类型,包括基本数据类型(如整型、浮点型、字符串等)和复杂数据类型(如枚举、其他消息类型等)。
  • 编译选项:protoc编译器提供了多种编译选项,允许你根据需要生成不同编程语言的代码,并自定义生成的代码的行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值