我正在尝试使用 google protocol buffer 在 C++ 中将消息序列化为字符串,并将序列化结果(其中包含嵌入的空值)分配给 std::string。以下是我的代码:
std::string result = message.SerializeAsString();
忽略第一个\0 字符之后的字符。结果没有完整的序列化字符串。我尝试了以下明确指定长度的方法。
int size = message.ByteSize();
std::string result(std::string(message.SerializeAsString()), size);
它也不适合我。还有其他方法吗?
提前致谢。
最佳答案
在 std::strings 中存储 NUL 字节没有问题。您可以正常分配字符串。您的两个代码片段都应该可以正常工作。
如果您调用 .c_str()
并尝试将字符串传递给需要 const char*
的内容,问题就会出现。此时,const char*
的接收者不知道字符串的大小,因此假设它在第一个 NUL 字节处结束。所以,不要那样做 - 始终确保您传递的是整个 std::string
,或者您传递的是指针和大小(来自 .size()
)。
您评论了另一个需要转换为 std::wstring
的答案。编辑:我将对此的评论移至您的 other question .
关于c++ - 如何将包含嵌入空值的 Google Protocol Buffer SerializeAsString() 输出分配给 std::string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30370189/