Protobuf C++ serialize到char*,便于在网络传输

看到这篇文章 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 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

你可能感兴趣的:(protobuf,C++)