1. 程式人生 > >protobuf-c 只有.c .h原始檔沒有.proto檔案能否恢復.proto檔案呢

protobuf-c 只有.c .h原始檔沒有.proto檔案能否恢復.proto檔案呢

答案是肯定的,只是想從proto-c生成的原始檔恢復.proto描述檔案,目前還沒有自動化的工具,必須人去識別並恢復.proto檔案

  • 我們知道,.proto檔案裡面由enum列舉型別和message訊息體組成,message裡面可以巢狀enum或者另外一個message

enum列舉型別,和一般的C語言定義列舉型別沒什麼兩樣,message的欄位修飾由三個關鍵字來描述,分別是required、optional、repeated

  • 比如說生成的.h原始碼如下,裡面有一個_PermitJoinType列舉,我們就知道.proto檔案裡面的enum名字叫做PermitJoinType,就是不帶前面的下劃線:
    在這裡插入圖片描述

.proto檔案對應的enum型別如下:
在這裡插入圖片描述

  • 比如說.h原始碼裡面的struct結構體,裡面有一個結構體如下,名字叫做_AFAddr,對應在.proto檔案裡面的message名字就叫做AFAddr:
    在這裡插入圖片描述

.proto檔案對應的message型別如下,請注意,例如上面.h檔案裡面的結構體欄位有一個has_shortaddr,其實.proto檔案裡面並沒有這個欄位,主要是proto用的是optional可選關鍵字來描述shortaddr,所以protobuf-c在處理這個關鍵字的時候,另外加了一個變數has_shortaddr用來標明這個欄位是否有值,接收方在收到這個欄位的同時會收到has_shortaddr,所以就能知道是否真正有值:
在這裡插入圖片描述

  • 對應的還有repeated關鍵字的處理,protobuf-c會另外增加一個n_字首的變數,用於標明repeated關鍵字描述的欄位具體數量。