当前位置: 首页 > article >正文

Google Protocol Buffers (proto3) 中的 DoubleValue 类型用法总结

文章目录

    • 前言
    • DoubleValue 的作用
    • 如何使用 DoubleValue
      • 1. 定义 .proto 文件
      • 2. 设置 DoubleValue 字段的值
      • 3. 检查字段值是否为空,并获取值
      • 3. demo示例

前言

这两天在做相关工作的时候,遇到了一个需要定义optional double 类型的proto字段,因为之前没用过,所以一时之间不知道怎么定义,查找了下相关资料后发现也很简单,就总结一下吧,以备不时之需。

DoubleValue 的作用

Google Protocol Buffers (protobuf) 是一种用于序列化结构化数据的轻量级、高效的数据交换格式。在proto3版本中,提供了一种特殊的包装类型,用于包装基本数据类型,其中就包括 google.protobuf.DoubleValue 类型,用于包装 double 类型的数据。

DoubleValue 的主要作用是在需要可选的 double 类型数据时,提供一种更丰富的表达方式。它可以用于表示一个 double 类型的值,同时允许指定该值是否存在(即可选或缺失的)。这对于处理可能缺失或未设置值的场景非常有意义。

如何使用 DoubleValue

1. 定义 .proto 文件

首先,我们需要在 .proto 文件中定义消息类型,包括 DoubleValue 类型的字段。

protobufCopy codesyntax = "proto3";

import "google/protobuf/wrappers.proto";

message MyMessage {
  google.protobuf.DoubleValue my_double_value = 1;
}

2. 设置 DoubleValue 字段的值

我们可以通过以下方式进行设值:

my_message.mutable_my_double_value()->set_value(42.5);

3. 检查字段值是否为空,并获取值

// 检查 DoubleValue 字段是否存在
  if (deserialized_message.has_my_double_value()) {
    // 获取 DoubleValue 字段的值
    double my_double_value = deserialized_message.my_double_value().value();
    std::cout << "DoubleValue: " << my_double_value << std::endl;
  } else {
    std::cout << "DoubleValue is not set." << std::endl;
  }

3. demo示例

#include <iostream>
#include "your_proto_file.pb.h"

int main() {
  // 创建消息对象
  MyMessage my_message;

  // 设置 DoubleValue 字段的值
  my_message.mutable_my_double_value()->set_value(42.5);

  // 将消息序列化为字符串
  std::string serialized_data = my_message.SerializeAsString();

  // 打印序列化后的数据
  std::cout << "Serialized Data: " << serialized_data << std::endl;

  // 反序列化消息
  MyMessage deserialized_message;
  deserialized_message.ParseFromString(serialized_data);

  // 检查 DoubleValue 字段是否存在
  if (deserialized_message.has_my_double_value()) {
    // 获取 DoubleValue 字段的值
    double my_double_value = deserialized_message.my_double_value().value();
    std::cout << "DoubleValue: " << my_double_value << std::endl;
  } else {
    std::cout << "DoubleValue is not set." << std::endl;
  }

  return 0;
}

上述代码中,首先创建了一个 MyMessage 对象,设置了其中的 my_double_value 字段,然后将消息序列化为字符串。接着,反序列化该字符串,并检查 my_double_value 字段是否存在,如果存在,则获取其值。


http://www.kler.cn/news/156958.html

相关文章:

  • linux创建新的py文件
  • 电商项目之Web实时消息推送(附源码)
  • 入门Python+Vue 全栈开发高级BI数据的可视化实战项目几个技术点总结
  • 2023年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题——解析版
  • 131. 分割回文串
  • JMeter从入门到精通
  • 个人Windows电脑通过Cloudreve+Cpolar搭建PHP云盘系统公网可访问
  • 机器学习(1)机器学习类型和机器学习的主要概念
  • 练习十一:简单卷积器的设计
  • 纯C读取文件实现解析H264裸流每一帧数据
  • 回归分析:预测和建模
  • Git 简介及异常场景处理
  • 12月4日作业
  • 作业12.4
  • 分享77个菜单导航JS特效,总有一款适合您
  • JDBC常见的几种连接池使用(C3P0、Druid、HikariCP 、DBCP)(附上代码详细讲解)
  • 软件测试【理论基础】
  • 基于AT89C51单片机的秒表设计
  • Python机器学习、深度学习入门丨气象常用科学计算库、气象海洋常用可视化库、爬虫和气象海洋数据、气象海洋常用插值方法、EOF统计分析、WRF模式后处理等
  • Stream 流
  • 【Vue】Linux 运行 npm run serve 报错 vue-cli-service: Permission denied
  • Django总结
  • 【bug排查解决】现象级延迟8-10s
  • 编程语言中常量(Constant)简介
  • Python (十八) 正则表达式
  • 外包干了2个月,技术退步明显。。。。。
  • MySQL Connector/J 数据库连接 URL的语法
  • Metasploit渗透测试的漏洞利用和攻击方法
  • Leetcode—409.最长回文串【简单】
  • 语音合成与配音工具(视频配音、微课配音、有声读物、产品营销)