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

2016-02-19 09:26 56 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)) {

      cerr "Failed to write address book." endl;

      return -1;

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

    }

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

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

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

      cerr "Failed to parse address book." endl;

      return -1;

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

    }

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

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

方法二:
代码如下:

int size = address_book.ByteSize();

void *buffer = malloc(size);

address_book.SerializeToArray(buffer, size);

方法三:
代码如下:

使用ostringstream ,

std::ostringstream stream;

address_book.SerializeToOstream(&stream);

string text = stream.str();

char* ctext = string.c_str();

来源:https://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 ...
这样删除会导致程序内存覆盖等一系列不可预知的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/...
实现LZARI压缩算法的C++类 作者: 阙荣文(querw) 下载源代码 这是一个基于LZARI算法的数据压缩的类.Haruhiko Okumura 于1989年7月4日用c语言写实现了这个算法.但是上面用到了一些全局或静态的变量,在MFC下用起来很不方便.我把它改写成了一个c++类,使它可以方便的压缩和解压缩,更重要的是,我新增加了两个...
标签: Web开发
一,简介 如果你对Unix/Linux有所了解的话,你应该知道他们大都自带了C和C++的编译器,分别是GCC和G++。Unix在程序安装及Make等许多地方使用到了这些编译器。利用一些控制台命令,C++和PHP, 我将向你介绍怎样生成一个完整的C++程序例子,他可以在用PHP程序来执行,并能获得相应的输出结果。我将先生成C++程序代码,并编译它,谈后讨论...

经验教程

55

收藏

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