protobuf c 入门

本文是一篇关于Protobuf C的入门教程,适合零基础的学习者。通过阅读,你可以了解如何使用Protobuf C进行数据序列化。同时,作者鼓励读者分享知识,以促进人工智能领域的发展,为社会做出贡献。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               
1、在.proto文件中定义消息格式2、使用protobuf编译器3、使用c++ api来读写消息0、为何使用protobuf?1、原始内存数据结构,可以以二进制方式sent/saved.这种方式需要相同的内存布局和字节序。2、以ad-hoc方式将数据项编码成一个简单字符串----比如,将4int类型编码成"12:3:-23:67"。这种方式简灵活。适用于简单数据。3、将数据序列化为XML。这种方式很流行,因为xml可读性好,编码解码方便,性能也好。仅仅XML dom树比较复杂。protobuf可以很好的解决上述问题。你编写一个.proto文件来描述数据结构。protobuf编译器使用它创建一个类,使用二进制方式自动编码/解码该数据结构。生成的类提供getter/setter方法。最重要的是,protobuf支持在此基础上进行格式扩展。示例1、定义协议格式package tutorial;  message Person {   required string name = 1;   required int32 id = 2;   optional string email = 3;       enum PhoneType {        MOBILE = 0;        HOME = 1;        WORK = 2;   }   message PhoneNumber {        required string number = 1;        optional PhoneType type = 2 [default = HOME];      }   repeated PhoneNumber phone = 4; }  message AddressBook {   repeated Person person = 1; }该结构与c++或java很像..proto文件以包声明开始,防止名字冲突。简单类型:bool, int32, float, double, string.其它类型:如上述的Person, PhoneNumber类型可以嵌套。“=1”, “=2”标识唯一“tag”.tag数1-15需要至少一个字节。required: 必须设置它的值optional: 可以设置,也可以不设置它的值repeated: 可以认为是动态分配的数组google工程师认为使用required威害更大, 他们更喜欢使用optional, repeated.2、编译你的协议运行protoc 来生成c++文件:protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.protoprotoc -I=./ --cpp_out=./ ./addressbook.proto生成的文件为:addressbook.pb.h, addressbook.pb.cc3、protobuf API生成的文件中有如下方法:// name  inline bool has_name() constinline void clear_name()inline const ::std::string& name() constinline void set_name(const ::std::string& value)inline void set_name(const char* value)inline ::std::string* mutable_name()// id  inline bool has_id() 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值