protoc支持c_protobuf-c使用说明

Simple complete example

A simple file,amessage.protofile following the language guide:

message AMessage

{

required int32 a=1;

optional int32 b=2;

}

Generate .h and .c files from the command-line in your current working directory:

protoc-c --c_out=. amessage.proto

Serialize/pack the AMessage as follows:

#include 

#include 

#include "amessage.pb-c.h"

int main (int argc, const char * argv[])

{

AMessage msg = AMESSAGE__INIT; // AMessage

void *buf;                     // Buffer to store serialized data

unsigned len;                  // Length of serialized data

if (argc != 2 && argc != 3)

{   // Allow one or two integers

fprintf(stderr,"usage: amessage a [b]\n");

return 1;

}

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

if (argc == 3) { msg.has_b = 1; msg.b = atoi(argv[2]); }

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;

}

I left most error handling out for brevity. Notice:

the use of

the A_MESSAGE__INIT macro to construct the message

the has_b member corresponds to the optional b field -- required fields do not   have a has_ member.

amessage__get_packed_size returns the length   of the packed data.

a_message__pack serializes the      message.

On the other hand, to deserialize/unpack a message, try code like this:

#include 

#include 

#include "amessage.pb-c.h"

#define MAX_MSG_SIZE 1024

static size_t

read_buffer (unsigned max_length, uint8_t *out)

{

size_t cur_len = 0;

uint8_t c;

while ((nread=fread(out + cur_len, 1, max_length - cur_len, stdin)) != 0)

{

cur_len += nread;

if (cur_len == max_length)

{

fprintf(stderr, "max message length exceeded\n");

exit(1);

}

}

return cur_len;

}

int main (int argc, const char * argv[])

{

AMessage *msg;</

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值