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