我正在使用Google协议缓冲区进行序列化。这是.proto文件:
message Word
{
message Record
{
optional uint64 id = 1;
optional string word = 2;
optional double value = 3;
}
message RecordSeq
{
repeated Record RecSeq = 1;
}
}
我使用SerializeAsString()将RecordSeq消息序列化为字符串。在我的代码中,在某个地方,我做了类似以下的事情:
Word::RecordSeq recseq;
for(int i=0;i<100;i++)
{
Word::Record *rec = recseq.add_recseq();
rec->set_id(4);
rec->set_word("program");
rec->set_value(1.0);
}
std::string result = recseq.SerializeAsString();
现在我想将此序列化消息插入SQL Server数据库。为此,我想要const char*
。但是,当我通过result.c_str()
转换为char *时,结果被截断。我打印出结果,发现里面有空白区域。
我的插入函数将结果及其长度作为参数。
Insert(result.c_str(), result.length());
我也尝试使用result.data()
。它也截断了结果。有没有其他方法可以做到这一点?
我尝试反序列化邮件而不将其转换为const char*
。它正确地反序列化它。
Word::RecordSeq recseq;
recseq.ParseFromString(result);
for(int j=0;j<recseq.recseq_size();j++)
{
const Word::Record& rec = recseq.recseq(j);
std::cout<<rec.word()<<std::endl;
std::cout<<rec.id()<<std::endl;
std::cout<<rec.value()<<std::endl;
}
感谢。