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

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

}

}

 

上一篇:C#-.NET Core 2从内存流下载Excel文件


下一篇:c#图片相关常用的方法及处理