看到这篇文章 https://blog.csdn.net/mycwq/article/details/19619875
作者的原因:在以上例子中,protobuf 序列化的 string 数据里含有 ‘\0’ 字符。如果以 char* 取protobuf序列化后的数据,将会丢失部分数据。
看到下面的回复中:
手册里也说了。string只是当成容器用。里面放的还是二进制数据。bool SerializeToString(string* output) const; : serializes the message and stores the bytes in the given string. Note that the bytes are binary, not text; we only use the string class as a convenient container把这篇博客中的代码运行了一遍,结果如下:
文章图片
在网络中,我们经常传输的是char*类型的字符数组,于是:
int size = person.ByteSize();
void *buffer = malloc(size);
person.SerializeToArray(buffer, size);
string str3;
str3.assign((char*)buffer, size);
tutorial::Person person3;
bool ret3 = person3.ParseFromString(str3);
【protobuf|Protobuf C++ serialize到char*,便于在网络传输】这样做是可以反序列化出来的。
先记录一下使用protobuf C++版遇到的问题,逐步添加。
ProtoBuf 常用序列化/反序列化API
https://blog.csdn.net/sealyao/article/details/6940245
Protobuf C++ serialize到char*的方法
https://www.cnblogs.com/brainy/archive/2012/05/13/2498660.html
另外一篇入门介绍的
https://blog.csdn.net/u014696921/article/details/52200010
推荐阅读
- 个人日记|K8s中Pod生命周期和重启策略
- 学习分享|【C语言函数基础】
- C++|C++浇水装置问题
- 数据结构|C++技巧(用class类实现链表)
- C++|从零开始学C++之基本知识
- 步履拾级杂记|VS2019的各种使用问题及解决方法
- leetcode题解|leetcode#106. 从中序与后序遍历序列构造二叉树
- 动态规划|暴力递归经典问题
- 麦克算法|4指针与队列
- 遇见蓝桥遇见你|小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题