protobuf c應用樣例

2021-07-22 19:54:29 字數 1847 閱讀 7140

./autogen.sh && ./configure && make && make install

根據協議格式生成原始碼與標頭檔案

amessage.proto 檔案內容如下:

message amessage

根據amessage.proto 生成c語言標頭檔案與原始碼

protoc-c --c_out=. amessage.proto

生成如下檔案:

amessage.pb-c.c

amessage.pb-c.h

封裝協議:pack.c

#include 

#include

#include "amessage.pb-c.h"

int main (int argc, const

char * argv)

msg.a = atoi(argv[1]);

if (argc == 3)

len = amessage__get_packed_size(&msg);

buf = malloc(len);

amessage__pack(&msg,buf);

fprintf(stderr,"writing %d serialized bytes\n",len); // see the length of message

fwrite(buf,len,1,stdout); // write to stdout to allow direct command line piping

free(buf); // free the allocated serialized buffer

return

0;}

解包協議:unpack.c

#include 

#include

#include "amessage.pb-c.h"

#define max_msg_size 1024

static size_t

read_buffer (unsigned max_length, uint8_t *out)

} return cur_len;

}int main (int argc, const

char * argv)

// display the message's fields.

printf("received: a=%d",msg->a); // required field

if (msg->has_b) // handle optional field

printf(" b=%d",msg->b);

printf("\n");

// free the unpacked message

amessage__free_unpacked(msg, null);

return

0;}

編譯樣例
gcc -o serialize pack.c amessage.pb-c.c -lprotobuf-c

gcc -o deserialize unpack.c amessage.pb-c.c -lprotobuf-c

執行結果
./serialize 10 2 | ./deserialize

writing 4 serialized bytes

received: a=10 b=2

【github樣例】

【protocol buffer 新手指南 】

rapidjson使用樣例

rapidjson預設支援的字元格式是utf 8的,一般中間介面是json檔案的話儲存為utf 8比較通用一些。如果是unicode的需要轉換。但從原始碼中的ch型別看,應該是支援泛型的,具體在用到了可以仔細研究一下。這篇文件中有json解析相關庫的效能比較,rapidjson還是各方面均衡比較突出...

位運算 樣例

取乙個整數 a 從右端開始的 4 7 位 1 先使 a 右移 4 位 a 4 2 設定乙個低 4 位全為 1 其餘全為 0 的數,可以用下面方法實現 0 4 0 的全部二進位制為 1 左移 4 位,這樣右端低 4 位為 0。3 將上面二者進行 運算。a 4 0 4 include void main...

建立錶樣例

create or replace procedure table procedure asi count integer begin select count into i count from user objects t where t.object type table and t.obje...