获取protobuf enum变量的字符串名字

假设proto中定义了一个enum枚举:

enum UserStatus { 
  AWAY = 0; 
  ONLINE = 1; 
  OFFLINE = 2; 
}

 

方法一:

std::string name = UserStatus_Name(UserStatus::AWAY);

(如果UserStatus嵌套在message类型MyMessage内,则使用MyMessage_UserStatus_Name(...))

name的值就是"AWAY"

 

方法二:

可以通过以下方法转换name和value:

const google::protobuf::EnumDescriptor *descriptor = UserStatus_descriptor(); 
std::string name = descriptor->FindValueByNumber(UserStatus::ONLINE)->name(); 
int number = descriptor->FindValueByName("ONLINE")->number();

 

reference:

https://stackoverflow.com/questions/32161409/how-to-get-protobuf-enum-as-string/46470954#46470954

### 回答1: 在protobuf.js中使用枚举类型可以通过使用该库提供的`enum`方法来定义枚举类型。例如: ``` const protobuf = require("protobufjs"); const root = protobuf.Root.fromJSON({ nested: { MyEnum: { values: { ENUM_VALUE_1: 0, ENUM_VALUE_2: 1, ENUM_VALUE_3: 2 } } } }); const MyEnum = root.lookup("MyEnum"); console.log(MyEnum.ENUM_VALUE_1); // outputs 0 console.log(MyEnum.ENUM_VALUE_2); // outputs 1 console.log(MyEnum.ENUM_VALUE_3); // outputs 2 ``` 在这个例子中,我们通过使用`protobuf.Root.fromJSON`方法来创建一个根对象,然后在其中定义了一个名为"MyEnum"的枚举类型,并定义了三个枚举值: ENUM_VALUE_1, ENUM_VALUE_2, ENUM_VALUE_3.然后我们用 root.lookup("MyEnum") 来获取这个Enum,接着就可以用上面这些值来操作了 ### 回答2: protobuf.js是一个用于高效序列化和反序列化数据的JavaScript库,它允许开发人员使用Protocol Buffers格式定义和使用数据结构。在protobuf.js中,可以使用enum定义枚举类型。 使用enum可以将一组预定义的常量作为一个类型进行使用。在protobuf.js中,可以通过以下方式定义enum类型: ```protobuf enum Color { RED = 0; GREEN = 1; BLUE = 2; } ``` 在上述例子中,定义了一个名为Color的enum类型,并定义了三个常量:RED,GREEN,BLUE。它们分别对应的值为0,1,2。 在实际使用中,可以将enum类型用作message类型的字段类型,也可以作为其他Enum消息类型的字段类型。例如,可以将Color字段定义为一个message类型的字段: ```protobuf message Shape { Color color = 1; } ``` 在上面的例子中,定义了一个名为Shape的message类型,其中的color字段类型为前面定义的Color枚举类型。 使用enum类型的好处是可以提高代码的可读性和可维护性。相比使用普通的整型或字符串类型的字段,enum可以限制字段的取值范围,使代码更加清晰明了。 在使用protobuf.js时,可以使用enum类型来定义和使用枚举常量,从而更好地组织和管理数据结构。 ### 回答3: 在 protobuf.js 中,我们可以使用 enum 来定义一组常量值,用于表示特定的枚举类型。 首先,我们需要在 .proto 文件中定义 enum。例如,我们可以定义一个表示颜色的枚举类型,如下所示: ``` enum Color { RED = 0; GREEN = 1; BLUE = 2; } ``` 接下来,在生成的 JavaScript 文件中,我们可以使用这个枚举类型。protobuf.js 提供了两种方式来引用枚举类型的常量值。 第一种方式是通过字符串名引用。例如,假设我们有一个变量 color,它的值是 "RED",我们可以使用 Color[color] 来获取相应的枚举常量值。示例如下: ```javascript const color = "RED"; const colorValue = Color[color]; // 输出 0 ``` 第二种方式是直接通过枚举类型名引用。例如,我们可以使用 Color.RED 来获取 RED 的枚举常量值。示例如下: ```javascript const colorValue = Color.RED; // 输出 0 ``` 需要注意的是,枚举类型的常量值默认从 0 开始递增,但我们也可以为每个常量指定一个具体的值。例如,我们可以将 RED 设为 1,如下所示: ``` enum Color { RED = 1; GREEN = 2; BLUE = 3; } ``` 这样,Color.RED 的值将为 1。在生成的 JavaScript 文件中,我们可以使用这些指定的值来引用枚举类型的常量。 总之,使用 protobuf.js 中的 enum 可以方便地定义和使用常量值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值