【问题标题】:Adding int64 and int32 in protobuf在 protobuf 中添加 int64 和 int32
【发布时间】:2015-08-21 10:00:03
【问题描述】:

如何在protobuff中为int64和int32添加元素

message PDBparam
{
  repeated string paramData=1; 
  required int64 HealthID=2; 
  required int32 OccCount=3; 
  optional bytes wci=4;

}

要添加 paramData,我可以使用下面的函数调用字符串,但我应该使用其他 3 个参数。

//add -param data
add_paramdata("param_1");

同样,我应该使用什么函数调用来获取所有这些变量中的数据。

【问题讨论】:

    标签: c++ protocol-buffers protobuf-net


    【解决方案1】:

    以下是protoc 为您的文件的 HealthID 字段生成的相关函数:

     // required int64 HealthID = 2;
      inline bool has_healthid() const;
      inline void clear_healthid();
      static const int kHealthIDFieldNumber = 2;
      inline ::google::protobuf::int64 healthid() const;
      inline void set_healthid(::google::protobuf::int64 value);
    

    您使用 set_healthid() 函数设置 healthid,然后 healthid() 返回它。其他字段也会生成类似的函数。

    由于可以有多个paramData,因此处理方式有点不同,您需要告诉它您想要获取或设置哪一个,由索引给出。例如遍历所有这些:

    for (int i = 0; i < buf.paramdata_size(); i++) {
         const std::string &pd = buf.paramdata(i);
         //use pd
     }
    

    【讨论】:

    • 要存储单个字节我应该使用什么数据类型,我可以使用字节吗
    • @Sijith 查看为您的 wci 字段生成的代码,您将一个字节设置为 char*,或 std::string 中的几个字节,或 void* + 大小。您以 std::string 的形式取回字节
    • 稍微补充一点,set_wci(const char* value) 形式需要一个以 nul 结尾的字符串(例如,您不能使用它来设置字节值 0),set_wci 的其他重载更多一般。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2018-07-27
    • 2018-02-24
    相关资源
    最近更新 更多