1.protobuf文档书写格式
(1)文件命名:xxx.probuf
(2) .proto文件消息格式:
//protobuf版本
syntax = "proto3";
message xxx{
}
//message表示类
//xxx是类名
//大括号内部是变量类型和变量
例:
syntax ="proto3";
message Persion{
int32 id = 1;
string name = 2;
string sex = 3;
int32 age = 4;
}
这个Persion内部相当于私有成员变量,protobuf是对这些值的操作框架。
2.对应数据类型?
.proto类型 | C++类型 | 备注 | double | double | 64位浮点数 | float | float | 32位浮点数 | int32 | int32 | 32位整数 | int64 | int64 | 64位整数 | uint32 | uint32 | 32位无符号整数 | uint64 | uint64 | 64位无符号整数 | sint32 | int32 | 32位整数,处理负数效率比int32更高 | sint32 | sint64 | 64位整数,处理负数效率比int64更高 | fixed32 | uint32 | 总是4个字节。如果数值总是比总是比228大的话,这个类型会比uint32高效。 | fixed64 | uint64 | 总是8个字节。如果数值总是比总是比256大的话,这个类型会比uint64高效。 | sfixed32 | int32 | 总是4个字节 | sfixed64 | int64 | 总是8个字节 | bool | bool | 布尔类型 | string | string | 一个字符串必须是UTF-8编码或者7-bit ASCII编码的文本 | bytes | string | 处理多字节的语言字符、如中文 | enum | enum | 枚举 | message | object of class | 自定义的消息类型 |
repeated bytes name = 2; //name可以在程序中创建多个,在程序中作为动态数组使用
对于字段修饰符为repeated的字段生成的函数,则稍微有一些不同,如people字段,则编译器会为其产生如下的代码:
int people_size() const;
void clear_people();
const ::Person& people(int index) const; //获取第index个people值
::Person* mutable_people(int index);
::Person* add_people(); //相当于创建一块内存
::google::protobuf::RepeatedPtrField< ::Person >* mutable_people();
const ::google::protobuf::RepeatedPtrField< ::Person >& people() const;
当需要定义一个消息类型的时候,可能想为一个字段指定某“预定义值序列”中的一个值,这时候可以通过枚举实现。
enum PhoneType //枚举消息类型
{
MOBILE = 0; //proto3版本中,首成员必须为0,成员不应有相同的值
HOME = 1;
WORK = 2;
}
使用:
phone2->set_type(Person::HOME);
.proto文件新增一个可选的package声明符,用来防止不同的消息类型有命名冲突。包的声明符会根据使用语言的不同影响生成的代码。对于C++,产生的类会被包装在C++的命名空间中。
package tutorial; //package声明符,和C++的namespace效果相同
使用:
tutorial::AddressBook obj;
import "info.proto"; //导入定义
3.proto文件内容
proto文件即消息协议原型定义文件,在该文件中我们可以通过使用描述性语言,来良好的定义我们程序中需要用到数据格式。
?相关方法:
以name为例:
void clear_name();//清除字符串内容
void set_name(const ::std::string& value);
void set_name(const char* value);//C语言里面没有string类型
void set_name(const char* value, size_t size);
const ::std::string& name() const;//获取字符串内容
::std::string* mutable_name();//返回变量地址
4.在VS中的项目配置
属性-》C/C++->预处理器-》预处理器定义:PROTOBUF_USE_DLLS
属性-》C/C++-》链接器-》输入:libprotobufd.lib
属性-》VC++目录—>包含目录:例如:D:\学习\笔记\protobuf\protobuf11\include
属性-》VC++目录—>库目录:例如:D:\学习\笔记\protobuf\protobuf11\lib
|