基于ProtobufC++serialize到char*的实现方法分析
2023-06-13 09:14:53 时间
protobuf的Demo程序是
C++版本的protubuf有几种serialize和unSerialize的方法:
官方demo程序采用的是
//Writethenewaddressbookbacktodisk.
fstreamoutput(argv[1],ios::out|ios::trunc|ios::binary);
if(!address_book.SerializeToOstream(&output)){
cerr<<"Failedtowriteaddressbook."<<endl;
return-1;
}
//Readtheexistingaddressbook.
fstreaminput(argv[1],ios::in|ios::binary);
if(!input){
cout<<argv[1]<<":Filenotfound. Creatinganewfile."<<endl;
}elseif(!address_book.ParseFromIstream(&input)){
cerr<<"Failedtoparseaddressbook."<<endl;
return-1;
}
上面采用的是fstream,把数据序列(反序列)打磁盘文件中。
而如果想序列到char*,并且通过socket传输,则可以使用:
intsize=address_book.ByteSize();
void*buffer=malloc(size);
address_book.SerializeToArray(buffer,size);
使用ostringstream,
std::ostringstreamstream;
address_book.SerializeToOstream(&stream);
stringtext=stream.str();
char*ctext=string.c_str();
相关文章
- c++ auto类型_auto C++
- c++发送post请求_request的post方法作用
- C++精通之路:红黑树的概念和实现方法的解析
- c++ strstr函数_简述酒精灯的正确使用方法
- Gamma校正_c++调试方法
- C++优先队列_队列queue中添加元素的方法
- C++中int转string方法
- 【C++ 语言】面向对象 ( 类定义 | 限制头文件引用次数 | 构造方法 | 析构方法 )
- C++ STL map删除键值对:erase()和clear()方法
- C++中dynamic_cast<>的使用方法小结
- C++实现两个日期间差多少天的解决方法
- 深入理解C/C++混合编程
- C++实现基数排序的方法详解
- C++中用两个标准容器stack,实现一个队列的方法详解
- 用C++实现单向循环链表的解决方法
- C#调用C++写的dll的实现方法
- C++求阶乘的两种方法
- C++设置超时时间的简单实现方法
- C++实现读取特定路径下文件夹及文件名的方法
- c++中template对字符串的处理方法
- C++堆排序算法的实现方法
- C++实现第K顺序统计量的求解方法
- C++实现二叉树非递归遍历方法实例总结
- C++循环链表之约瑟夫环的实现方法
- C++线程池的简单实现方法