• 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;

    }

  • 相关阅读:
    oracle 10g 免安装客户端在windows下配置
    sql2005 sa密码
    使用windows live writer 有感
    windows xp SNMP安装包提取
    汉化groove2007
    迁移SQL server 2005 Reporting Services到SQL server 2008 Reporting Services全程截图操作指南
    foxmail 6在使用中的问题
    AGPM客户端连接不上服务器解决一例
    SpringSource Tool Suite add CloudFoundry service
    Java 之 SWing
  • 原文地址:https://www.cnblogs.com/Arnold-Zhang/p/15354542.html
Copyright © 2020-2023  润新知