C 使用ProtoBuffer 心得

2021-07-06 04:38:39 字數 1198 閱讀 1218

protobuffer比xml,json 好就不說了。

關鍵就說兩個地方

為啥需要說著兩個呢,因為他的序列化後在 最前面需要加上長度,而這個並不是真正的長度,是經過乙個演算法生成的長度。

1. 把本地的字串轉換成  protobuffer

ocommonmsg.set_type(duolabo::commonmessage_type_login_request);

ocommonmsg.set_value(ologinrequest.serializeasstring());

string strcommonmsg = ocommonmsg.serializeasstring();

int nlen = google::protobuf::io::codedoutputstream::varintsize32(strcommonmsg.length());

google::protobuf::uint8 *plen = new google::protobuf::uint8[nlen];

google::protobuf::io::codedoutputstream::writevarint32toarray(strcommonmsg.length(), plen);

string st((const char *)plen, nlen);

st += strcommonmsg;

delete plen;

sendtcpsocket(st.c_str(), st.size());

2. 把protobuffer轉換成  本地字串。

google::protobuf::uint32 uilength = 0;

google::protobuf::io::codedinputstream is((google::protobuf::uint8 *)presvbuf, nrecvbytes); 

is.readvarint32(&uilength);

char *pbuf = new char[uilength];

is.readraw(pbuf, uilength);

duolabo::commonmessage ocommonmsg;

string strcommonmsg(pbuf, uilength);

delete pbuf;

if(ocommonmsg.parsefromstring(strcommonmsg))

NodeJS使用protobuffer的簡單示例

1.先定義乙個.proto的檔案,檔名稱,test.proto message column2.使用nodejs 完成對資料的編碼及解碼 const fs require fs const protobuf require protocol buffers nodejs 使用protocol buf...

C 使用protobuffer的一些坑

原文 最後總結一句,使用protobuf,在c 中給string賦值c字串的時候一定要指定長度,因為事實上賦值的內容可能是乙個bytes陣列,而不是乙個標準的 0 結尾的字串。賦值範例如下 char pdata 1024 serialized data int length getdatalengt...

使用ITextSharp生成PDF檔案心得

首先建立乙個winform應用程式,並且新增itextsharp的引用,在按鈕的單擊事件寫上生成pdf的 document docpdf new document pagesize.a4,0,0,0,0 建立乙個pdf文件的物件,設定紙張大小為a4,頁邊距為0 當需要把pdf紙張設定為橫向時,使用p...