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

protobuf: 通讯录2.1

先引入需要知道的proto3语法:

1.proto3

1.hexdump

作用:

hexdump:是Linux下的⼀个⼆进制⽂件查看⼯具,它可以将⼆进制⽂件转换为ASCII、⼋进制、

⼗进制、⼗六进制格式进⾏查看。

-C: 表⽰每个字节显⽰为16进制和相应的ASCII字符

2.decode

作用:

读二进制的信息并以文本形式打印到 标准输出

格式: protoc --decode=消息类型.package命名 消息所在文件 < contacts.bin(本来是从标准输入中读,现在加上< 就到contacts.bin中读)

3.enum

注意格式和c/c++不同,定义时后面是 ";"

注意:同级的枚举类型,常量名不能相同!!! 否则会报错

与 import 其他的.proto文件中的enum枚举类型中的常量值相同也会报错,除非import 的.proto文件有package包住

3.通讯录2.1

contacts.proto

syntax = "proto3";
  package contacts;


  message People
  {
    string name = 1;
    int32 age = 2;
    //里面是电话的字段和类型
    message Phone
    {
        string num = 1;
        enum PhoneType 
        {
          MP = 0; // 移动电话
          TEL = 1; // 固定电话
        }
        PhoneType type = 2;
    }
    //repeated 表示重复  相当于定义一个数组 里面全是Phone
    repeated Phone phone = 3; 
  }

  message Contacts
  {
    repeated People person = 1;
  }

write.cc(只展示新增部分)

for(int i = 0;;i++)
    {
        std::cout << "请输入联系人的电话: " << i+1 << "(只输入回车完成电话新增): ";
        std::string number;
        getline(std::cin,number);
        if(number.empty())
            break;
        //接收add_phone返回的phone对象
        contacts::People_Phone* phone = person->add_phone();
        phone->set_num(number);

        std::cout << "请输入联系人的电话类型:(0.移动电话, 1.固定电话): ";
        int type;
        std::cin >> type;
        std::cin.ignore(256,'\n');
        switch(type)
        {
            case 0:
                phone->set_type(contacts::People_Phone_PhoneType::People_Phone_PhoneType_MP);
                break;
            case 1:
                phone->set_type(contacts::People_Phone_PhoneType::People_Phone_PhoneType_TEL);
                break;
            default:
                std::cout << "输入有误, 请重新根据提示输入" << std::endl;
                break;
        }
    }

    std::cout << "--------------添加联系人成功--------------" << std::endl;

}

read.cc(只展示新增部分)

for(int j = 0;j<person.phone_size();j++)
        {
            const contacts::People_Phone phone = person.phone(j);
            std::cout << "联系人电话" << j+1  << ": "<< phone.num() << "   ";
            std::cout << "电话类型"  << ": ("<< People_Phone_PhoneType_Name(phone.type()) << ")" << std::endl; 
        }


http://www.kler.cn/a/461732.html

相关文章:

  • 第二十六天 RNN在NLP中的应用
  • Unity3D 基于GraphView实现的节点编辑器框架详解
  • 在 SQL 中,区分 聚合列 和 非聚合列(nonaggregated column)
  • 高效管理 Nginx 的利器:nginxWebUI 指南和 Docker 部署安装过程
  • 【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)
  • 项目:停车场车辆管理系统
  • 生成文本格式日历的Python程序
  • SwanLab x LLaMA Factory:国产开源AI训练工具组合拳(含教程)
  • 如何使用Python生成词云图:结合`wordcloud`、`imageio`、`collections`和`jieba`分词模块
  • Excel VBA 自动填充空白并合并相同值的解决方案
  • 1.计算机英语
  • Spring boot对接安全证书
  • 通过 4 种方法将数据从 OnePlus 传输到Android
  • JavaScript中的JSON是什么
  • 【我的 PWN 学习手札】IO_FILE 之 劫持vtable
  • 24.01.01 MyBatis
  • 1.梳理一下neo4j的安装的过程以及错误
  • 9.若依-自定义表单构建
  • MarkDown怎么转pdf;Mark Text怎么使用;
  • sublime text for mac 如何在一行末尾添加内容或符号
  • 用uniapp写一个播放视频首页页面代码
  • FFmpeg(音视频处理的瑞士军刀)开发实战指南
  • 论文笔记:DepthLab: From Partial to Complete
  • [excel] VLOOKUP
  • RapidSSL 证书
  • 【有例子代码】Spring框架的设计模式应用(上集)