autostring_1=descriptor->FindValueByNumber(1)->value(); autonumber_1=descriptor->FindValueByName("type1")->number(); 可以得到1的字面string, 在项目如果经常需要字符串和enum 转换可以考虑直接使用protobuf的内置enum
type type_1 = type::type1;int32_ttype_impliticy_convert = type_1;// wrongint32_ttype_impliticy_convert =static_cast<int32_t>(type_1);// ok enum方便,但是如果要转换成string很麻烦,必须一个个匹配。而且与int 互转而且还要考虑索引边界 引出正题,protocbuf 提供的enum 就比较方便了 protobuf...
* enum类型数据会转化为enum的字符串名 * bytes会转化为Base64字符串 * * @author Yang Guanrong * @date 2019/08/20 17:11 */ public class ProtoJsonUtils { public static String toJson(Message sourceMessage) throws IOException { String json = JsonFormat.printer().print(sourceMessage); return j...
protobuf的enum与string转换 c/c++ enum 介绍 说起c/c++ 的enum,⽐起python 真的是⽅便简洁 enum type{ type1 = 0,type2 } enum的元素对应的int 默认从0 开始依次增加,除⾮⼿动指定起始值。int val = type1;assert(val == 0)enum 内的元素是全局的,意味着在其它地⽅直接使⽤type type_...
enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { string number = 1; PhoneType type = 2; } repeated PhoneNumber phone = 4; } message是消息体,包含了多个fields(数据项),每一个fields都是key-value类型。
enum 是 key 和 value 的对应,protobuf.js 允许将 enum 编解码为 key,即 string 类型,也允许编解码为 value,即 number 类型。我曾想直接将 enum 编解码为 string,主要目的是为了数据的自解释,希望研发在开发时看到的是 status:"open" 而不是 status: 0 这样冷冰冰的 number。但是有一个问题,如果编码成 st...
string, 只能处理ASCII字符 bytes, 用于处理多字节的语言字符 enum, 枚举类型 二、protobuf的使用流程: 下载protobuf压缩包后,解压、配置、编译、安装,即可使用 protoc 命令 查看Linux中是否安装成功: [root@linux] protoc --version libprotoc 3.15.8
枚举(enum) 消息格式 当需要定义一个消息类型的时候,可能想为一个字段指定某“预定义值序列”中的一个值,这时候可以通过枚举实现。 syntax = "proto3";//指定版本信息,不指定会报错 message Person //message为关键字,作用为定义一种消息类型 { string name = 1; //姓名 ...
在protobuf的开发中,经常遇到pb转到json,然后又需要从json转为对应的pb,enum值需要有一个反射来做到值和字符串的映射,官方提供了对应的反射接口: 链接: EnumValueDescriptor 链接: EnumDescriptor To get a EnumDescriptor To get the string value, use FindValueByNumber(int...python...
3)枚举常量值必须在 32 位整型值的范围内(因为 enum 值是使用可变编码方式的,对负数不够高效,因此不推荐在 enum 中使用负数); 4)枚举里面的 = 操作是对常量进行赋值操作,而枚举外面的 = 则是对当前字段进行编号。 6.5Protobuf 集合 repeated string list = 1; //类似 Java 的 List<String> map<string,...