C++之protobuf库的简单介绍

C++之protobuf库的简单介绍

    • 简介
    • 类型对应关系
    • 应用例子

简介

Protocol Buffers (Protobuf)是Google开发的一种数据序列化协议,它可以将结构化数据序列化,用于数据存储、通信协议等方面。C++下的Protobuf库是Protobuf的C++实现,下面详细介绍C++下Protobuf库的用法。

类型对应关系

1)布尔型(Bool):在C++中对应于bool类型,取值为true或false。
2)整数型(Int32、Int64):在C++中对应于int32_t和int64_t类型,分别表示32位和64位整数。
3)浮点型(Float、Double):在C++中对应于float和double类型,分别表示单精度浮点数和双精度浮点数。
4)字符串型(String):在C++中对应于std::string类型,用于存储字符串。
5)字节型(Bytes):在C++中对应于std::string类型,用于存储字节流。
6)枚举型(Enum):在C++中对应于枚举类型,用于定义一组具名的值。
7)数组型(Repeated):在C++中对应于std::vector类型,用于存储一组相同类型的元素。
8)消息型(Message):在C++中对应于定义的消息类型,可以嵌套其他消息、枚举、字段等类1)型。
9)映射型(Map):在C++中对应于std::unordered_map类型,用于存储键值对的映射关系。

应用例子

1)定义一个.proto 结尾的文件

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

2)使用protoc编译器将.proto文件编译成C++代码
例如:

protoc --cpp_out=. person.proto

这会在当前目录下生成person.pb.h和person.pb.cc两个文件,其中包含了你定义的数据结构的C++实现。

3)使用Protobuf库进行序列化和反序列化,代码如下:

#include   
#include "person.pb.h"  
  
int main() {  
  // 创建Person对象  
  Person::SharedPtr person = Person::New();  
  person->set_name("Alice");  
  person->set_age(25);  
  person->set_email("[email protected]");  
  
  // 将Person对象序列化为bytes  
  std::string serialized_person;  
  person->SerializeToString(&serialized_person);  
  
  // 将bytes反序列化为Person对象  
  Person::SharedPtr person2 = Person::New();  
  person2->ParseFromString(serialized_person);  
  
  // 打印反序列化后的Person对象信息  
  std::cout << "Name: " << person2->name() << std::endl;  
  std::cout << "Age: " << person2->age() << std::endl;  
  std::cout << "Email: " << person2->email() << std::endl;  
  
  return 0;  
}

在上面的示例中,我们创建了一个Person对象,并设置了其名称、年龄和邮箱。然后我们将Person对象序列化为bytes,然后再将bytes反序列化为Person对象。最后我们打印了反序列化后的Person对象的信息。

你可能感兴趣的:(c++)