我正在尝试使用google协议缓冲区将消息序列化为C ++中的字符串,并将序列化结果(包含嵌入的空值)分配给std :: string。以下是我的代码:
std::string result = message.SerializeAsString();
忽略第一个\ 0字符后面的字符。结果没有完整的序列化字符串。我尝试了以下明确指定长度的内容。
int size = message.ByteSize();
std::string result(std::string(message.SerializeAsString()), size);
它也不适合我。还有其他办法吗?
提前致谢。
答案 0 :(得分:2)
在std :: strings中存储NUL字节没有问题。您可以正常分配字符串。你的两个代码片段都可以正常工作。
如果您曾致电.c_str()
并尝试将字符串传递给期待const char*
的字符串,则会出现此问题。此时,const char*
的接收器不知道字符串的大小,因此假定它在第一个NUL字节处结束。所以,不要这样做 - 始终确保你要么传递std::string
整体,要么传递指针和大小(来自.size()
)。
您评论了需要转换为std::wstring
的其他答案。编辑:我已将此评论移至您的other question。
答案 1 :(得分:1)
std::string result(message.SerializeAsString(), size);
创建临时字符串时
的std :: string(message.SerializeAsString())
此部分使用嵌入的空值。