./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...