zoukankan      html  css  js  c++  java
  • Protobuf 3学习笔记【语法篇】

    Profiler.proto

    package Profiler;

    message ProfilerDumperCtrl {

     int32 num = 1;

     int32 def_num = 2 [default=10];

     string str = 3;

    repeated string rep_str = 4;

    }

    包名:Profiler , 类似C++的命名空间,主要是用来防止不同消息类型的命名冲突

    使用protoc编译器将proto文件编译成C++代码后,该包名会被添加到每个生成的结构体名开头

    repeated: 字段属性为可重复字段,该字段可以包含0-n个元素,字段中的元素顺序被保留

    = 1, = 2 这些= 号的数字是标识号,对于一个message而言,每个字段必须有一个唯一的标识号

    这就是在解码中用来识别各个字段的

    下面来认识一下protobuf中定义的基本数据类型:

    proto类型 C++类型  备注
    double double  
    float float  
    int32 int32 使用可变长编码,值为负数时不够高效,这种情况请使用sint32
    int32  int32 使用可变长编码,值为负数时不够高效,这种情况请使用sint64
    sint32 int32 有符号的整形值,编码时比直接用int32高效
    sint64 int64 有符号的整形值,编码时比直接用int64高效
    uint32 uint32 使用可变长编码
    uint64 uint64 使用可变长编码
    fixed32 uint32 固定4字节编码,数值总是大于2的28次幂时,比uint32更高效
    fixed64 uint64 固定4字节编码,数值总是大于2的56次幂时,比uint64更高效
    sfixed32 int32  
    sfixed64 int64  
    bool bool  
    string string 字符串必须是UTF-8编码或者7bit ASCII编码的文本
    bytes string 包含任意顺序的字节数据

    枚举及其他消息类型

    enum statusE

    {

      statusInvalid = 0;

           OPEN = 1;

      CLOSED = 2;

    }

    如果需要引用的message是写在别的proto文件中,可以通过import "xx.proto" 来引入

    message也可以嵌套

    message Profiler {

      uint32  id = 1;

           message Dumper{

        uint32 id  = 1;

      }

      Dumper dump = 2;

    }

  • 相关阅读:
    iOS 10 的杂碎资料
    MAC SVN Merge 操作
    iOS中AFNetworking2.0和AFNetworking3.0 的HTTPS的配置
    从字符串中获取指定字符内的内容
    判断是否是是全汉字、全字母、全数字、数字和字母等
    解析URL 获取某一个参数值
    长按TextField或TextView显示中文的粘贴复制
    TextField和TextView的限制输入长度
    抢购、距活动结束,剩余时间倒计时。
    Cell右滑 多个编辑选项栏
  • 原文地址:https://www.cnblogs.com/Arnold-Zhang/p/15354542.html
Copyright © 2011-2022 走看看