如何将protobuf enum获取为字符串? 是否可以在C++中获得原字符串枚举的字符串等价项?

如何将protobuf enum获取为字符串? 是否可以在C++中获得原字符串枚举的字符串等价项?,c++,enums,protocol-buffers,C++,Enums,Protocol Buffers,e、 g: 以下是消息描述: 在我的代码中,我希望执行以下操作: 和类可用于此类操作 生成的.pb.h和.pb.cc名称非常容易阅读,因此您可以查看它们以获得它们提供的功能的详细信息 在这种特殊情况下,应采用以下措施(未经测试): 请参阅的答案,使用and EnumDescriptor文档说明: 获取枚举描述符的步骤 要获取生成的枚举类型的枚举描述符,请调用 TypeName\u描述符()。使用DescriptorPool构建您自己的 描述符 要获取字符串值,请使用FindValueByNu

e、 g:

以下是消息描述:

在我的代码中,我希望执行以下操作:

和类可用于此类操作 生成的
.pb.h
.pb.cc
名称非常容易阅读,因此您可以查看它们以获得它们提供的功能的详细信息

在这种特殊情况下,应采用以下措施(未经测试):

请参阅的答案,使用and

EnumDescriptor文档说明:

  • 获取枚举描述符的步骤

    要获取生成的枚举类型的枚举描述符,请调用 TypeName\u描述符()。使用DescriptorPool构建您自己的 描述符

  • 要获取字符串值,请使用FindValueByNumber(int number)

    常量EnumValueDescriptor*EnumDescriptor::FindValueByNumber(整数)常量

    按数字查找值

    如果不存在此类值,则返回NULL。如果多个值具有此>编号,则返回定义的第一个值

例如,获取protobuf枚举:

enum UserStatus {
  AWAY = 0;
  ONLINE = 1;
  OFFLINE = 2;
}
从值读取字符串名称和从字符串名称读取值的代码:

const google::protobuf::EnumDescriptor *descriptor = UserStatus_descriptor();

std::string name = descriptor->FindValueByNumber(UserStatus::ONLINE)->name();
int number = descriptor->FindValueByName("ONLINE")->number();

std::cout << "Enum name: " << name << std::endl;
std::cout << "Enum number: " << number << std::endl;
const google::protobuf::EnumDescriptor*descriptor=UserStatus_descriptor();
std::string name=descriptor->FindValueByNumber(UserStatus::ONLINE)->name();
int number=descriptor->FindValueByName(“联机”)->number();
std::无法查看这些示例末尾的
->name()
->number()
。它们很容易被忽略,也很难找出如何纠正它们。
std::string requestTypeString = MyMessage_RequestType_Name(requestType);
enum UserStatus {
  AWAY = 0;
  ONLINE = 1;
  OFFLINE = 2;
}
const google::protobuf::EnumDescriptor *descriptor = UserStatus_descriptor();

std::string name = descriptor->FindValueByNumber(UserStatus::ONLINE)->name();
int number = descriptor->FindValueByName("ONLINE")->number();

std::cout << "Enum name: " << name << std::endl;
std::cout << "Enum number: " << number << std::endl;