You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:36:03