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

    }

  • 相关阅读:
    注册登录
    ASP.NET常用编程代码(一)
    HTML、CSS、JS、PHP 的学习顺序~(零基础初学者)
    如何学习javascript?(转)
    如何完全卸载SQL Server 2005
    如何给网页标题栏上添加图标(favicon.ico)
    网页制作常用代码
    网页颜色代码对照表
    ASP.NET常用编程代码(二)
    50个PHOTOSHOP快捷键技能!
  • 原文地址:https://www.cnblogs.com/Arnold-Zhang/p/15354542.html
Copyright © 2020-2023  润新知