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

【protobuf】protobuf自定义数据格式,CMake编译C++文件读写自定义数据

protobuf自定义数据格式,CMake编译文件读写自定义数据

  • 1.protobuf安装
  • 2.定义.proto文件
  • 3.编写main.cpp
  • 4.编写CMAkeLists配置文件
  • 5.运行

1.protobuf安装

  protobuf库链接

2.定义.proto文件

新建一个Person.proto文件和一个Animal.proto文件,内容如下:

syntax = "proto3";package UserInfo;message Person {string name = 1;int32 id = 2;string email = 3;
}
syntax = "proto3";package UserInfo;message Animal {string name = 1;int32 id = 2;int32 age = 3;
}

在这里插入图片描述

3.编写main.cpp

main函数中对proto中的对象进行序列化和反序列化,内容如下:

#include "Animal.pb.h"
#include "Person.pb.h"
#include <fstream>
#include <iostream>int main() {{// 创建 Person 对象UserInfo::Person person;person.set_name("John Doe");person.set_id(123);person.set_email("john.doe@example.com");// 将数据序列化到文件std::ofstream output("person_data", std::ios::binary);person.SerializeToOstream(&output);output.close();// 从文件中读取数据并反序列化UserInfo::Person read_person;std::ifstream input("person_data", std::ios::binary);read_person.ParseFromIstream(&input);input.close();// 打印反序列化后的数据std::cout << "Name: " << read_person.name() << std::endl;std::cout << "ID: " << read_person.id() << std::endl;std::cout << "Email: " << read_person.email() << std::endl;}{ // 创建 Animal 对象UserInfo::Animal animal;animal.set_name("Dog");animal.set_id(456);animal.set_age(5);// 将数据序列化到文件std::ofstream output("animal_data", std::ios::binary);animal.SerializeToOstream(&output);output.close();// 从文件中读取数据并反序列化UserInfo::Animal read_animal;std::ifstream input("animal_data", std::ios::binary);read_animal.ParseFromIstream(&input);input.close();// 打印反序列化后的数据std::cout << "Name: " << read_animal.name() << std::endl;std::cout << "ID: " << read_animal.id() << std::endl;std::cout << "age: " << read_animal.age() << std::endl;}return 0;
}

在这里插入图片描述
 &ems;注意这时候我们的main.cpp文件是报错的,因为找不到Animal.h文件和Person.h文件,没关系,接下来编辑CMAkeLists.txt配置文件,生成相应的头文件即可!

4.编写CMAkeLists配置文件

cmake_minimum_required(VERSION 3.5)
project(YourProjectName)set(CMAKE_CXX_STANDARD 11)# 查找protobuf库
find_package(Protobuf REQUIRED)# 获取所有的protobuf文件
file(GLOB PROTO_FILES "proto/*.proto")# 生成protobuf文件的C++代码
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_FILES})# 添加生成的protobuf文件到项目中
include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories(${PROTOBUF_INCLUDE_DIRS})# 添加可执行文件
add_executable(main main.cpp ${PROTO_SRCS} ${PROTO_HDRS})# 链接protobuf库
target_link_libraries(main ${PROTOBUF_LIBRARIES})

在这里插入图片描述

5.运行

mkdir build
cd build
cmake ..
make 
./main

结果如下:

在这里插入图片描述

http://www.lryc.cn/news/214636.html

相关文章:

  • 解决:http://localhost:8080 不在以下 request 合法域名列表中
  • Linux普通用户提权(sudo)
  • 链表指定节点的插入
  • 解决问题Conda:CondaValueError: Malformed version string ‘~’ : invalid character(s)
  • Sci Immunol丨Tim-3 适配器蛋白 Bat3 是耐受性树突状细胞
  • 天软特色因子看板(2023.10 第14期)
  • Photoshop(PS)2021版 安装教程(图文教程超详细)
  • 详解React:Props构建可复用UI的基石
  • 【Unity】【VR开发疑难】Unity运行就报无法启动XR Plugin
  • 本地启动Elasticsearch(docker启动)
  • JVM修炼印记之初识
  • 开关电源老化试验和性能检测系统软件
  • 水库大坝可视化智能远程监管方案,助力安全监测智能巡检
  • C#学习系列之虚方法和多态
  • 面试算法44:二叉树中每层的最大值
  • JWT的头部、载荷和签名分别包含哪些信息?
  • 【烧火柴问题】奇思妙想火柴
  • C++数据结构算法篇Ⅰ
  • Python selenium获取元素信息
  • 测试Winsock的select
  • CentOS 搭建 Hadoop3 高可用集群
  • ModuleNotFoundError: No module named ‘paddle.fluid.incubate.fleet‘
  • 【Java】Java中的引用类型
  • File类、方法递归
  • MySQL - 系统库之 sys
  • GoLong的学习之路(十七)基础工具之Gin框架使用JWT(前后端分离)
  • 【代码数据】2023粤港澳大湾区金融数学建模B题分享
  • 大数据之LibrA数据库系统告警处理(ALM-12006 节点故障)
  • poi兴趣点推荐数据集介绍
  • 把两个4点的结构相加