Protobuf在各种环境中使用的总结

10 篇文章 0 订阅
5 篇文章 0 订阅

1.在 ubuntu 中 使用 proto-c 生成 .proto 对应

生成规则 protoc-c --c_out=./pb test.proto

--c_out 生成 C 语言的格式

./pb 输出的路径

test.proto 输入的源文件 可以多个

在 makefile 中 增加 ./lib/libprotobuf-c.a 的链接库

 

2.在c++中使用 protobuf

1.将 E:\share\protobuf\protobuf-2.6.1\vsprojects 项目生成的 libprotobuf.lib 拷贝到 运行项目的 lib文件夹中

2.protoc --cpp_out=../pb cardrv.proto

 

3.在nodejs中调用 protobuf

1.安装 protobufjs

npm install protobufjs -g

2.在文件中 使用它

var protoBufJs=require("protobufjs");

var pbRoot = protoBufJs.loadSync(path.join(__dirname,"./pb/elabdata.proto"));

var eLabMessageType = pbRoot.lookupType("ELabMessage");

 

 

//加密:

var elabmsg=eLabMessageType.create();

....

var buf = eLabMessageType.encode(elabmsg).finish();

 

//解密:

var msg=eLabMessageType.decode(tmp);

 

 

4.在Unity中使用 protobuf

使用 protobuf-net

1.下载protobuf-net

2.生成cs代码 protogen -i:U3d2Drv.proto -o:U3d2Drv.cs

3.将 protobuf-net.dll 拷贝到 u3d 项目里面的 \Assets\Plugins

4.序列化 参考代码

using (MemoryStream ms = new MemoryStream())

{

var a = new U3dDrvMsg();

a.cmd = U3dCmd.GameProcess;

a.gamestate = GameStateCmd.GameBegin;

ProtoBuf.Serializer.Serialize(ms, a);

byte[] result = new byte[ms.Length];

ms.Position = 0;

ms.Read(result, 0, result.Length);

}

5.反序列化参考代码

T Deserialize<T>(byte[] b)

{

using (MemoryStream ms = new MemoryStream())

{

ms.Write(b, 0, b.Length);

ms.Position = 0;

return ProtoBuf.Serializer.Deserialize<T>(ms);

}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值