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