当前位置:   article > 正文

protobuf 安装 及 使用_protobuf下载安装

protobuf下载安装

文章中有不理解的地方 进群交流讨论服务器技术 可以加Q群397926909

1.下载protobuf

Releases · protocolbuffers/protobuf · GitHub

2.使用CMAKE编译 编译完成后 打开VS工程编译libprotobuf,protoc,libprotoc这三个

 3 编译生成后的下列文件

放到项目libs目录下

 4 拷贝google 文件放项目下的include文件夹里

 5 然后修改VS属性 如下图

ptorobuf安装完成

下面使用protobuf

1.ptorobuf的语法有如下

package 声明
.proto 文件以一个 package 声明开始。这个是为了防止不同项目之间的命名冲突。类似于c++的namespcae xxx

字段类型
消息(message)定义了。一个消息就是某些类型的字段的集合。许多标准的、简单的数据类型都可以用作字段类型,字段类型有如下

在这里插入图片描述

修饰符
字段都需要用以下之一的修饰符来修饰:

(1)required
必须提供字段值,否则对应的消息会被认为是“未初始化的”。required 的字段与 optional 字段类似,为了兼容性 基本使用optional了

(2)optional
字段值指定与否都可以。如果没有指定一个 optional 的字段值,它就会使用默认值。

(3)repeated
字段会重复 N 次(N 可以为 0)
2.创建一个Account.proto文件里面内容为:

例子为:

  1. syntax = "proto2"; //选择proto语法 有proto3
  2. package myprotobuf; //命名空间
  3. message helloworld //包名
  4. {
  5. required int32 id = 1;
  6. optional string name = 2;
  7. optional string password=3;
  8. }

3.把Account.proto文件放到lib下 cmd命令下使用 protoc.exe --cpp_out=./ Account.proto命令后

 会生成Account.pb.cc  及 Account.pb.h文件

把Account.pb.cc文件添加到项目中

使用测试代码编译

  1. #include <iostream>
  2. #include <fstream>
  3. #include <windows.h>
  4. #include <Account.pb.h>
  5. #include <string>
  6. using namespace std;
  7. int main(void)
  8. {
  9. //消息封装
  10. myprotobuf::helloworld in_msg;
  11. {
  12. in_msg.set_id(888);
  13. string str = "我是中国人";
  14. cout << sizeof(str);
  15. in_msg.set_name(nameencode);
  16. std::fstream output("./proto.text", std::ios::out | std::ios::trunc | std::ios::binary);
  17. if (!in_msg.SerializeToOstream(&output)) {
  18. std::cerr << "failed to serialize in_msg" << std::endl;
  19. return -1;
  20. }
  21. }
  22. //消息解析
  23. myprotobuf::helloworld out_msg;
  24. {
  25. std::fstream input("./proto.text", std::ios::in | std::ios::binary);
  26. if (!out_msg.ParseFromIstream(&input)) {
  27. std::cerr << "failed to parse" << std::endl;
  28. return -1;
  29. }
  30. string name = out_msg.name();
  31. std::cout << out_msg.id() << std::endl;
  32. std::cout << "解析后的数据转码后为:" << name << std::endl;
  33. }
  34. getchar();
  35. return 0;
  36. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号