枚举值 0x88000000 的 protoc 编译器错误超出范围

Posted

技术标签:

【中文标题】枚举值 0x88000000 的 protoc 编译器错误超出范围【英文标题】:protoc compiler error out of range for enum value 0x88000000 【发布时间】:2018-07-10 01:49:05 【问题描述】:

在 proto 文件中,我有一个枚举,就像我将其转换为 c++ 代码一样 它抛出错误 Integer out of range for field(_G,_P,_L) 。在https://developers.google.com/protocol-buffers/docs/proto3#enum 中说“枚举器常量必须在 32 位整数的范围内”。请帮我解决这个问题

枚举字段是

 pb_EnumTargetType_A = 0x40000000;
 tpb_EnumTargetType_G = 0x88000000;
 tpb_EnumTargetType_P = 0x8C000000;
  tpb_EnumTargetType_L = 0x8A000000;

【问题讨论】:

使用格式化工具使您的帖子更具可读性。使用 code blocking 表示代码、日志和错误文本,使用 bolditalics 突出显示内容 【参考方案1】:

我猜它会将其解释为 数,因此需要超过 32 位才能将其编码为有符号整数。将其写为有符号整数似乎可行:

pb_EnumTargetType_A = 0x40000000;
tpb_EnumTargetType_G = -2013265920; // 0x88000000
tpb_EnumTargetType_P = -1946157056; // 0x8C000000
tpb_EnumTargetType_L = -1979711488; // 0x8A000000

【讨论】:

以上是关于枚举值 0x88000000 的 protoc 编译器错误超出范围的主要内容,如果未能解决你的问题,请参考以下文章

swift 使用枚举样本swift函数对象,允许将函数编译为枚举并被调用

协议缓冲区:枚举问题

由于 C++ 而解决 Google protobuf 中的枚举字段命名限制的解决方案

0xFF是啥颜色啊?

Swift中结构体和类的区别

protoc