Fork me on GitHub
hahaya +
facebook send mail to hahaya sina weibo
关于订阅 hahaya's blog » Blog » blog
分类:
标签:
上一篇:在go中调用c语言
下一篇:go中使用protobuf

很久之前就听过protobuf,但是一直没有使用过,最近在做一个小东西,涉及到C++和go的数据交换,就想到了使用protobuf,由于没有使用过,所以就先需要一些小小的试验,接下来就有了本文。

一、protobuf简介

protobuf全称为google protocol buffer,是google内部使用的一种数据交换格式,后来开源出来了。protobuf是一种语言无关、平台无关、扩展性好的用于通信协议、数据存储的结构化数据串行化方法。很像XML、JSON等,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。

二、下载安装protobuf

要想使用protobuf,得先进行安装,在http://code.google.com/p/protobuf/downloads/list下载protobuf源码包protobuf-2.5.0.tar.gz,在终端下依次执行如下命令进行protobuf的安装:

    tar -zxvf protocol-2.5.0.tar.gz  
    cd protobuf-2.5.0  
    ./configure  
    make  
    make check  
    sudo make install  

安装完成后在终端下执行vim ~/.profile打开配置文件,在该文件中添加export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib,然后保存退出,接下来执行source ~/.profile是配置文件修改生效,最后执行protoc --version查看protobuf版本以测试是否安装成功

三、生成protobuf协议文件

执行命令vim msg.proto新建一个名为msg.proto的文件,并将其打开,在msg.proto中输入如下内容:

package demo;

message msg
{
    required int32 MsgType = 1;     //必选字段
    required string MsgInfo = 2;    //必选字段
    required string MsgFrom = 3;    //必选字段
    optional string opt = 4;        //可选字段
}

输入完成后,保存退出,在终端下执行protoc --cpp_out=. msg.proto生成对应的msg.pb.h和msg.pb.cpp文件

四、在C++中使用protobuf

执行命令vim protobuf_test.cc新建一个名为protobuf_test.cc的C++源文件,并将其打开,在其中输入如下内容:

#include "msg.pb.h"
#include <iostream>
#include <string>
using namespace std;

int main(int argc, char *argv[]){
    demo::msg msg_test;
    msg_test.set_msgtype(1);
    msg_test.set_msginfo("I am hahaya");
    msg_test.set_msgfrom("127.0.0.1");

    //将信息格式化到字符串中(写操作)
    string in_data;
    msg_test.SerializeToString(&in_data);
    cout << "format:" << in_data << endl;

    //将信息从字符串中反格式化出来(读操作)
    demo::msg msg_encoding;
    msg_encoding.ParseFromString(in_data);
    cout << "msg type:" << msg_encoding.msgtype() << endl;
    cout << "msg info:" << msg_encoding.msginfo() << endl;
    cout << "msg from:" << msg_encoding.msgfrom() << endl;
    return 0;
}

输入完成后,保存退出,在终端下执行g++ protobuff_test.cc msg.pb.cc -o main -lprotobuf命令进行编译,编译成功后执行./main运行。
数据交换使用protobuf真方便,google的东西真心靠谱,更多关于protobuf的使用请在官网http://code.google.com/p/protobuf/上查看~

作者:hahaya
出处:http://hahaya.github.com/use-protobuf-in-c-plus-plus
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
分类: 标签:
点击查看评论