關於C 呼叫protobuf 序列化和反序列化

2022-05-05 05:12:10 字數 2314 閱讀 3352

為此,我廢了好大的腦子,畢竟開局乙個文件(引數名和實際給我的引數名都不一致),剩下全靠摸索;

弄懂了之後,其實也沒這麼複雜。一開始我用proto 3.0.0 和 3.6.1版本封裝,不行,因為對方介面要求版本2.x;

在google搜到發現貌似protobuf早期版本不支援c#,所以蛋蛋很是憂傷;後來找到乙個proto-net版,編譯後請求還是不行;

歷經幾天苦逼的摸索,下面直接給**

proto檔案:

package test;

/*聚屏**接入api文件,介面版本: 6.0.0

*///

作業系統型別

enum

ostype ;

//版本號資訊

message version ;

//唯一使用者標識,必需使用明文,必需按要求填寫,具體填寫指導詳見介面說明文件

enum

udidtype :[0-9a-f]:[0-9a-f]:[0-9a-f]:[0-9a-f]:[0-9a-f]

media_id = 2; //

**內部維護的唯一id,僅對少部分**開放,預設僅允許mac id

}message udid ;

//二維尺寸資訊

message size ;

message device

//wifi熱點資訊

message wifiap :[0-9a-f]:[0-9a-f]:[0-9a-f]:[0-9a-f]:[0-9a-f]

optional int32 rssi = 2; //

必填!熱點訊號強度,通常是負數

optional bytes ap_name = 3; //

必填!熱點名稱,可不傳遞,建議傳遞當前接入熱點的名稱,用於判斷使用者當前所處場所,中文需要utf-8編碼

};//

gps資訊

message gps ;

optional coordinatetype coordinate_type = 1; //

必填!座標型別

optional double longitude = 2; //

必填!經度

optional double latitude = 3; //

必填!緯度

};//

網路環境資訊

message network ;

//運營商代號,每個運營商唯一(plmn碼每個運營商可能有多個)

enum

operatortype

optional bytes ipv4 = 1; //

optional connectiontype connection_type = 2; //

必填!網路連線型別,用於判斷網速

optional operatortype operator_type = 3; //

必填!移動運營商型別,用於運營商定向廣告

};//

物料型別

enum

materialtype

//**的使用者特徵資料

message userinfo

//裝置探針資料

message probeinfo

message slotinfo

message tsapirequest

//廣告物料元資料資訊

message materialmeta ;

//廣告效果跟蹤資訊

message tracking ;

optional trackingevent tracking_event = 1; //

被跟蹤的廣告展示過程事件

repeated bytes tracking_url = 2; //

事件監控url

};message ad

message tsapiresponse

序列化和反序列化

data da = new

data();

using (var fs = file.create("

d:\\da.bin

"))//

檔案輸出流

protobuf序列化儲存

之前做的乙個專案,為了提速,用到了序列化儲存。下面是乙個protobuf的使用示例。include person.pb.h include iostream include fstream include time.h pragma comment lib,libprotobuf.lib pragm...

C 使用protobuf簡述

首先,建立乙個c 4.5以上project,因為最新的protobuf依賴於c 5.0的語言特性。然後,我們通過nuget,為專案新增對protobuf的引用,搜尋protobuf就可以開始安裝了。安裝完成後,可以編譯一次工程,在bin debug目錄下就可以拿到google.protobuf.dl...

關於C 呼叫VC DLL

由於在c 呼叫vc的dll檔案不能直接引用,那麼,我們可以通過以下辦法解決。dll檔案分為託管和非託管,在呼叫託管的很好辦,直接被使用的需要引用,間接使用的需要拷貝到bin目錄下.非託管的處理會比較麻煩,實際上,你拷貝到bin沒有任何幫助,因為clr會把檔案拷貝到乙個臨時目錄下,然後在那執行web,...