十六进制的枚举类型使用Java返回错误的值?

时间:2013-09-11 12:43:06

标签: java hex

我在下面的代码中使用以下枚举类型:

public static enum PanelType
 {
   PAS8((byte)0xA6), PAS83((byte)0xA7);

  private byte code;

  private PanelType(byte code)
  {
   this.code=code;
  }

  public byte getCode(){
   return code;
  }
 }

但是,当我尝试在我的方法中使用它时:

 for (PanelType type:PanelType.values())
 {
   if (decoded[3]==type.getCode())
   return type;
 }

我为:type.getCode()方法返回了错误的值。它正在返回-90而不是166,这正是我所期待的。

我知道FFFF FFFF FFFF FFA6 = -90,但为什么0xA6会以负数返回?

2 个答案:

答案 0 :(得分:8)

byte的最大值为127,最小值为-128。 0xA6以十进制表示166,因此存在溢出:

-128 + (166 - 127 - 1) == -90

答案 1 :(得分:4)

一个简单的解决方案是首先不将其强制转换为字节。这样可以使代码更简单,并且可以达到您的预期效果。

public enum PanelType {
  PAS8(0xA6), PAS83(0xA7);

  private int code;

  private PanelType(int code) {
    this.code = code;
  }

  public int getCode() {
    return code;
  }
}