3

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

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 会返回为负数?

4

2 回答 2

9

bytes 的最大值为 127,最小值为 -128。0xA6十进制是 166,所以有溢出:

-128 + (166 - 127 - 1) == -90
于 2013-09-11T12:45:52.480 回答
4

一个简单的解决方案是首先不将其转换为字节。这将使代码更简单,它会做你所期望的。

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

  private int code;

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

  public int getCode() {
    return code;
  }
}
于 2013-09-11T12:49:39.450 回答