基于Protobuf C++ serialize到char*的实现方法分析

2016-02-19 09:26 57 1 收藏

下面请跟着图老师小编一起来了解下基于Protobuf C++ serialize到char*的实现方法分析,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

【 tulaoshi.com - 编程语言 】

protobuf的Demo程序是

C++版本的protubuf有几种serialize和unSerialize的方法:

方法一:

官方demo程序采用的是
代码如下:

 // Write the new address book back to disk.

    fstream output(argv[1], ios::out | ios::trunc | ios::binary);

    if (!address_book.SerializeToOstream(&output)) {

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

      cerr "Failed to write address book." endl;

      return -1;

    }

 // Read the existing address book.

    fstream input(argv[1], ios::in | ios::binary);

    if (!input) {

      cout argv[1] ": File not found.  Creating a new file." endl;

    } else if (!address_book.ParseFromIstream(&input)) {

      cerr "Failed to parse address book." endl;

      return -1;

    }

上面采用的是fstream,把数据序列(反序列)打磁盘文件中。

而如果想序列到char *,并且通过socket传输,则可以使用:

方法二:
代码如下:

int size = address_book.ByteSize();

void *buffer = malloc(size);

address_book.SerializeToArray(buffer, size);

方法三:
代码如下:

使用ostringstream ,

std::ostringstream stream;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

address_book.SerializeToOstream(&stream);

string text = stream.str();

char* ctext = string.c_str();

来源:http://www.tulaoshi.com/n/20160219/1590770.html

延伸阅读
在日常开发过程中经常会使用到时间类函数的统计,其中获取1970年至今的UTC时间是比较常使用的,但是在windows下没有直接能够精确到微妙级的函数可用。本文提供方法正好可以解决这类需求问题。 下面先给出 C++实现代码 : 代码如下: #ifndef UTC_TIME_STAMP_H_ #define UTC_TIME_STAMP_H_ #include windows.h #include sys/timeb.h #include ...
实现LZARI压缩算法的C++类 作者: 阙荣文(querw) 下载源代码 这是一个基于LZARI算法的数据压缩的类.Haruhiko Okumura 于1989年7月4日用c语言写实现了这个算法.但是上面用到了一些全局或静态的变量,在MFC下用起来很不方便.我把它改写成了一个c++类,使它可以方便的压缩和解压缩,更重要的是,我新增加了两个...
这样删除会导致程序内存覆盖等一系列不可预知的bug 代码如下: mapstring, string::iterator iter; for ( iter = mm.begin();iter != mm.end(); iter ++ ) { if ( iter-second == something ) { mm.erase( iter ); } } 原因:当erase掉iter后,继续执行iter++,这个时候就乱套了 正确方法: 代码如下: for (iter = mm.begin();i...
原理 平滑也称模糊, 是一项简单且使用频率很高的图像处理方法。 平滑处理时需要用到一个滤波器。 最常用的滤波器是线性滤波器,线性滤波处理的输出像素值(例如: )是输入像素值(例如: )的加权平均: 称为核, 它仅仅是一个加权系数。 均值平滑 下面是一个使用blur函数的均值平滑: 代码如下: #include "opencv2/core/...
《c++编程思想》上说一个类如果没有拷贝函数,那么编译器就会自动创建一个默认的拷贝函数。下面就让我们看一下真实的情况。 首先看一个简单的类X,这个类没有显示定义拷贝构造函数。 c++源码如下: 代码如下: class X { private:     int i;     int j; }; int main() {     X x1;//先定义...

经验教程

816

收藏

28
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部