3.6 Protobuf的编译和使用

Protobuf的编译

Protobuf的下载与编译
编译错误:
1 hash_map需要宏 _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS;
2 _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;
3 ETC宏 SPEPARATOR宏 注意加空格
4 修改编译,每次只编译1个项目
Protobuf的使用
数据封包,解包,打包是快捷,高效的
这个东西是比较容易修改的

与语言无关、平台无关、可扩展的
用于序列化结构化数据的
效率高

Protobuf的使用

将生成的lib复制到当前目录
写一个协议文件

//tianchen.proto

message EmbeddedMessage{
	required uint32 nSubCmd=1;
	required string strParams=2;
}

message TianChenMsg{
	//required optional repeated(字段规则) 可以迭代
	required uint32 nCmd =1 [default=0];
	required string strData=2;
	optional EmbeddedMessage subMsg=3;
}

生成相关代码 然后添加进去,

.\protoc.exe -I. --cpp_out=. tianchen.proto

然后从NetGut下载Protobuf的相关文件,进行编写代码

代码

#include <iostream>
#include "tianchen.pb.h"
#pragma comment(lib,"libprotobuf.lib")
#pragma comment(lib,"libprotobuf-lite.lib")
#pragma comment(lib,"libprotoc.lib")

int main()
{
	TianChenMsg msg;
	msg.set_ncmd(0);
	msg.set_strdata("hello wolrd");
	EmbeddedMessage* sub=new EmbeddedMessage();
	sub->set_nsubcmd(1);
	sub->set_strparams("tian chen");
	msg.set_allocated_submsg(sub);
	msg.SerializePartialToOstream(&std::cout);
	std::string result = msg.SerializeAsString();//序列化
	//std::string result = msg.SerializePartialAsString();
	//std::cout << result << std::endl;
	//网络发送 

	TianChenMsg msg2;
	msg2.ParseFromString(result);//反序列化	
	std::cout<<std::endl << "cmd:" << msg2.ncmd() << std::endl;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天晨。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值