protobuf|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
把这篇博客中的代码运行了一遍,结果如下:
protobuf|Protobuf C++ serialize到char*,便于在网络传输
文章图片

在网络中,我们经常传输的是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

    推荐阅读