Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
A protocol buffers library for C
branch: master

Merge pull request #49 from cloudwu/lua53

add lua 5.3 binding
latest commit 7ba3266dce
云风 authored
Failed to load latest commit information.
binding bugfix: gc whould no param
pbc.xcodeproj commit pbc
pbc ios编译不过
src PTYPE_BYTES default
test lua 5.3 binding
.gitignore ios编译不过 commit pbc
Makefile lua 5.3 binding Update
license.txt change src directory and add license
pbc.h replace typename to type_name, conflict with C++ keyword
pbc.sln Create VS2012 project
pbc.vcxproj LNK4006
pbc.vcxproj.filters replace typename to type_name, conflict with C++ keyword


PBC is a google protocol buffers library for C without code generation.

Quick Example

package tutorial;

message Person {
  required string name = 1;
  required int32 id = 2;        // Unique ID number for this person.
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];

  repeated PhoneNumber phone = 4;
struct pbc_rmessage * m = pbc_rmessage_new(env, "tutorial.Person", slice);
printf("name = %s\n", pbc_rmessage_string(m , "name" , 0 , NULL));
printf("id = %d\n", pbc_rmessage_integer(m , "id" , 0 , NULL));
printf("email = %s\n", pbc_rmessage_string(m , "email" , 0 , NULL));

int phone_n = pbc_rmessage_size(m, "phone");
int i;

for (i=0;i<phone_n;i++) {
    struct pbc_rmessage * p = pbc_rmessage_message(m , "phone", i);
    printf("\tnumber[%d] = %s\n",i,pbc_rmessage_string(p , "number", i ,NULL));
    printf("\ttype[%d] = %s\n",i,pbc_rmessage_string(p, "type", i, NULL));


Message API

You can use wmessage for encoding , and rmessage for decoding.

See test/addressbook.c for details.

Pattern API

If you need better performance , you can use pbc_pattern_xxx api .

See test/pattern.c for details.

Pattern api is faster and less memory used because it can access data in native C struct.


PBC support extension in a very simple way . PBC add a specific prefix to every extension field name.


Not supported


With message API , you can use both string and integer as enum type . They must be integer in Pattern API.

Lua bindings

cd bindings/lua && make


Question ?

Something went wrong with that request. Please try again.