使用protobuf的C++应用中ParseFromString()无输出的原因是什么
Protobuf 解析无输出问题修正
核心错误点
SerializeToString()返回值为布尔类型,仅标识序列化操作是否成功,序列化后的二进制数据会写入你传入的参数&m对应的字符串中,你将布尔返回值赋值给字符串变量v属于类型使用错误,v存储的并非有效序列化数据。ParseFromString()入参需要传入序列化得到的二进制字符串,返回值同样为布尔类型标识解析是否成功,你将布尔返回值赋值给字符串变量t也属于类型错误,且传入的参数v本身无效,自然无法得到预期输出。- 补充建议:解析时优先使用全新的空Protobuf对象,避免原有对象已设置的数值干扰结果验证。
修正后代码
#include <iostream> #include <string> #include "cpnt.pb.h" using namespace std; int main() { wombat::HeartBeat send_h; // 执行序列化 send_h.set_value(1); string serialized_data; bool serialize_ok = send_h.SerializeToString(&serialized_data); if (!serialize_ok) { cout << "序列化执行失败" << endl; return -1; } // 执行解析 wombat::HeartBeat recv_h; bool parse_ok = recv_h.ParseFromString(serialized_data); if (!parse_ok) { cout << "解析执行失败" << endl; return -1; } // 结果输出 cout << "\n 解析得到的消息值为:" << recv_h.value(); cout << "\n 序列化后二进制数据长度为:" << serialized_data.size() << "字节"; cout << "\n 序列化状态:" << serialize_ok; cout << "\n 解析状态:" << parse_ok << endl; return 0; }
修正后即可正常输出解析得到的数值,原有代码因类型不匹配、入参无效导致无预期输出。
内容的提问来源于stack exchange,提问作者Tellrell White
相关产品推荐
相关产品推荐

