我想将我的协议缓冲区序列化为char*。这个是可能的吗?我知道其中一个可以按如下方式序列化到文件:
fstream output("/home/eamorr/test.bin", ios::out | ios::trunc | ios::binary);
if (!address_book.SerializeToOstream(&output)) {
cerr << "Failed to write address book." << endl;
return -1;
}
但是我想序列化到一个C风格的char*,以便在网络上传输。
该怎么做呢?请记住,我对C++非常陌生。
发布于 2012-02-06 18:25:50
这很简单:
size_t size = address_book.ByteSizeLong();
void *buffer = malloc(size);
address_book.SerializeToArray(buffer, size);
还要检查documentation of MessageLite class,它是Message的父类,包含有用的方法。
发布于 2012-02-06 18:19:53
您可以将输出串化为一个字符串,并使用stream.str()
获取该字符串,然后使用string.c_str()
访问c- ostringstream
。
std::ostringstream stream;
address_book.SerializeToOstream(&stream);
string text = stream.str();
char* ctext = text.c_str();
不要忘了包含std::ostringstream
的sstream
。
发布于 2012-02-06 18:22:35
可以使用ByteSizeLong()
获取消息将占用的字节数,然后使用SerializeToArray()
将编码后的消息填充到数组中。
https://stackoverflow.com/questions/9158576
复制相似问题