C/C++ protobuf与json互转
-
测试环境
- ubuntu16.04 64bit
- protocbuf:3.9.1 (支持json转换需>=3.0.0)
-
协议
syntax = "proto2";message Person{optional string name = 1;optional uint32 age = 2;optional string address = 3; } -
测试代码
//protobuf >= 3.0.0#include "person.pb.h" #include "google/protobuf/stubs/stringpiece.h" #include "google/protobuf/util/json_util.h" #include <iostream>bool proto_to_json(const google::protobuf::Message& message, std::string& json) {google::protobuf::util::JsonPrintOptions options;// options.add_whitespace = true;return MessageToJsonString(message, &json, options).ok(); }bool json_to_proto(const std::string& json, google::protobuf::Message& message) {google::protobuf::util::JsonParseOptions options;return JsonStringToMessage(json, &message, options).ok(); }int main(int argc, char* argv[]){std::string person_json;Person person;person.set_name("hb");person.set_age(20);person.set_address("sjz");if (!proto_to_json(person, person_json)) {std::cout << "pb to json failed!" << std::endl;}else{std::cout << "pb to json:" << person_json << std::endl;}person.Clear();person_json.clear();person_json = "{\"name\": \"HB\", \"age\": 22, \"address\": \"SJZ\" }";if (!json_to_proto(person_json, person)) {std::cout << "json to pb failed!" << std::endl;}else{std::cout << "json to pb: name:" << person.name() << " age:" << person.age() << " address:" << person.address() << std::endl;}return 0; } -
编译
- 编译协议
protoc --cpp_out=. person.proto - 编译代码
g++ person.pb.cc demo.cpp -lprotobuf -lpthread -o demo && ./demo
- 编译协议
-
运行结果
pb to json:{"name":"hb","age":20,"address":"sjz"} json to pb: name:HB age:22 address:SJZ
相关文章:
C/C++ protobuf与json互转
测试环境 ubuntu16.04 64bitprotocbuf:3.9.1 (支持json转换需>3.0.0) 协议 syntax "proto2";message Person{optional string name 1;optional uint32 age 2;optional string address 3; }测试代码 //protobuf > 3.0.0#…...
Open CASCADE学习|圆柱螺旋线绘制原理探究
1、圆柱螺旋线绘制原理 在OCC中,圆柱面的参数方程为: 设P为(x0,y0,z0),则 xx0r*cos(u) yy0r*sin(u) zz0v 但u、v之间有关系时,此方程表达为圆柱螺旋线,u、v之间为线性关系时是等螺距螺旋线࿰…...
Python学习笔记--认识sys.argv
sys.argv 是 Python 的一个内置模块 sys 中的一个属性。它是一个列表,包含了从命令行传递给脚本的参数。 例如,如果你有一个名为 script.py 的脚本,并且你从终端窗口命令行这样运行它: >>>python script.py arg1 arg2 …...
【C++】入门基础
前言:C是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。熟悉C语言之后,对C学习有一定的帮助,因此从今天开始们将进入C的学习。 💖 博主CSDN主页:…...
Nginx与keepalived实现集群
提醒一下:下面实例讲解是在mac虚拟机里的Ubuntu系统演示的; Nginx与keepalived实现集群实现的效果 两台服务器都安装Nginx与keepalived: master服务器的ip(192.168.200.2) backup服务器的ip(192.168.200.4) 将 master服务器Nginx与keepalive…...
初识MQRabbitMQ快速入门
一、同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应,但是你却不能…...
javaMailSender 发送邮件,基于Spring Boot
目录 引入依赖 配置文件配置 具体代码 MultipartFile 转 File 工具类 引入依赖 <!--邮件--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><!--日…...
【汇总】解决Spring-Web与Spring-WebFlux冲突
【汇总】解决Spring-Web与Spring-WebFlux冲突 问题发现问题解决问题一:The bean requestMappingHandlerMapping, defined in class path resource [org/springframework/web/reactive/config/DelegatingWebFluxConfiguration.class],问题二:The Java/XML…...
maven 依赖配置补充
依赖配置补充 依赖范围 import 管理依赖最基本的办法是继承父工程,但是和 Java 类一样,Maven 也是单继承的。如果不同体系的依赖信息封装在不同 POM 中了,没办法继承多个父工程怎么办?这时就可以使用 import 依赖范围。 典型案…...
Pandas ------ 向 Excel 文件中写入含有合并表头的数据
Pandas ------ 向 Excel 文件中写入含有合并表头的数据 推荐阅读引言正文 推荐阅读 Pandas ------ 向 Excel 文件中写入含有 multi-index 和 Multi-column 表头的数据 引言 这里给大家介绍一下如何向 Excel 中写入带有合并表头的数据。 正文 import pandas as pddf1 pd.D…...
kafka summary
最近整体梳理之前用到的一些东西,回顾Kafka的时候好多东西都忘记了,把一些自己记的比较模糊并且感觉有用的东西整理一遍并且记忆一遍,仅用于记录以备后续回顾 Kafka的哪些场景中使用了零拷贝 生产者发送消息:在 Kafka 生产者发送…...
【新书推荐】2.6节 原码、反码和补码
回顾上一节中,我们讲解了整数的编码规则。 无符号整数编码规则:无符号整数全部都是正数,是什么就存什么。 有符号整数编码规则:有符号整数最高有效位为0是正数,最高有效位为1是负数。 本节内容:原码、反…...
docker 网络及如何资源(CPU/内存/磁盘)控制
安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host docker网络模式 Host 容器与宿主机共享网络namespace,即容器和宿主机使用同一个IP、端口范围(容器与宿主机或其他使…...
安装 nvm
前言: nvm 即 node 版本管理工具 (node version manager),好处是方便切换 node.js 版本。 通过将多个 node 版本安装在指定路径,然后通过 nvm 命令切换时,就会切换我们环境变量中 node 命令指定的实际执行的软件路径。 使用场景…...
Redis解决方案:NOAUTH Authentication required(连接jedis绑定密码或修改redis密码)
Redis解决方案:NOAUTH Authentication required(连接jedis绑定密码或修改redis密码) Java使用jedis连接redis时出现错误NOAUTH Authentication required 一、问题报错和原因 本地设置了redis的密码,但在远程连接时并没有输入密…...
多维时序 | Matlab实现WOA-TCN-Multihead-Attention鲸鱼算法优化时间卷积网络结合多头注意力机制多变量时间序列预测
多维时序 | Matlab实现WOA-TCN-Multihead-Attention鲸鱼算法优化时间卷积网络结合多头注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现WOA-TCN-Multihead-Attention鲸鱼算法优化时间卷积网络结合多头注意力机制多变量时间序列预测效果一览基本介绍程序设计参考资料 效…...
如何实现无公网IP实现远程访问MongoDB文件数据库
📑前言 本文主要是如何实现无公网IP实现远程访问MongoDB文件数据库的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 &#x…...
华为防火墙USG6000V1的NAT实验
实验拓扑: 之前实验做过,可以翻找之前的博客,各设备ip和接口已配好,均可可ping通防火墙。 实验要求: 一.生产区在工作时间内可以访问dmz区域,仅可以访问http服务器。 二.办公区全天可以访问dmz区域&…...
spark-flink设计思想之吸星大法-1
Spark和Flink都是大数据处理框架,它们的设计思想有一些不同之处。以下是对它们设计思想的简要对比: 数据模型和计算模型: Spark:Spark使用弹性分布式数据集(RDD)作为其核心数据结构。RDD是只读的、不可变的…...
力扣1312. 让字符串成为回文串的最少插入次数
动态规划 思路: 通过插入字符构造回文串,要想插入次数最少,可以将字符串 s 的逆序 s 进行比较找出最长公共子序列;可以先分析,字符串 s 通过插入得到回文串 ps,其中间的字符应该不会变化: 若 s…...
ONNXRuntime GPU推理想用BFloat16加速?手把手教你搞定PyTorch + CUDA环境配置与避坑
ONNXRuntime GPU推理想用BFloat16加速?手把手教你搞定PyTorch CUDA环境配置与避坑 在深度学习模型部署领域,BFloat16数据类型正逐渐成为提升推理性能的新宠。这种16位浮点格式保留了与32位浮点相同的指数位,在保持数值范围的同时减少了内存占…...
AI量化交易框架解析:从架构设计到实战部署
1. 项目概述:一个AI驱动的加密资产对冲基金框架最近在GitHub上看到一个挺有意思的项目,叫“ai-hedge-fund-crypto”。光看名字,就能感受到一股浓浓的“量化AI加密”的混合气息。这其实是一个开源框架,旨在帮助开发者或量化研究员&…...
终极Windows Defender移除指南:13项核心服务的完整卸载方案
终极Windows Defender移除指南:13项核心服务的完整卸载方案 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirror…...
GitClaw:基于Go的轻量级Git钩子服务器与集中式权限管理方案
1. 项目概述与核心价值如果你是一名开发者,尤其是经常在团队协作中处理Git仓库的工程师,那么你一定对“权限管理”这四个字又爱又恨。爱的是它能保障代码安全,恨的是它配置起来繁琐,尤其是在处理跨项目、跨团队的复杂权限矩阵时。…...
【STC8H】GPIO模式深度解析:从准双向到推挽,如何精准控制外设
1. STC8H的GPIO模式全景解析 第一次接触STC8H的GPIO配置时,我被那个神秘的PxM0和PxM1寄存器搞得晕头转向。直到有一次调试I2C通讯失败,才发现是开漏模式配置错误。这次教训让我明白,理解GPIO的四种工作模式,就像掌握不同武器的使用…...
MedAgentBench:大语言模型在医学诊断中的动态评估与智能体构建实践
1. 项目概述:当大语言模型成为医学诊断的“实习生”最近在医学人工智能的圈子里,一个名为MedAgentBench的项目引起了我的注意。它来自斯坦福大学机器学习组,这个名字本身就自带光环。简单来说,这不是一个直接看病的AI,…...
Linux权限继承与umask配置实践
Linux权限继承与umask配置实践很多协作目录问题并不是因为当前权限错了,而是因为新建文件的默认权限总是不符合预期。背后的核心变量之一就是 umask。中级阶段如果不理解默认权限是怎么生成的,就会陷入“每次都手工 chmod”的低效循环。一、默认权限不是…...
MySQL高可用与扩展-主从复制读写分离分库分表
当单库压力越来越大时,常见演进路线是先做主从复制,再做读写分离;如果数据量和写入压力继续增长,就需要考虑分库分表。 这三者解决的问题不同:方案主要解决什么主从复制数据冗余、读扩展、故障切换基础读写分离缓解读请…...
别再一个点一个点更新了!用Python手把手实现分块LMS(BLMS)滤波器,收敛稳如老狗
用Python实现分块LMS滤波器:告别收敛震荡的工程实践指南 在实时信号处理领域,自适应滤波器的稳定性往往比理论性能更重要。想象一下这样的场景:你正在开发一套会议系统降噪算法,每次麦克风捕捉到新的声音样本,滤波器系…...
Sunshine游戏串流架构深度解析:3种高效部署方案完全指南
Sunshine游戏串流架构深度解析:3种高效部署方案完全指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine作为一款开源自托管的游戏串流服务器,为Mo…...
