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