簡體   English   中英

十六進制的枚舉類型使用Java返回錯誤的值?

[英]Enum types in hex are returning wrong values using Java?

我在下面的代碼中使用以下枚舉類型:

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作為負數返回?

byte s的最大值為127,最小值為-128。 0xA6是十進制的166,所以有一個溢出:

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

一個簡單的解決方案是首先不將其強制轉換為字節。 這將使代碼更簡單,它將完成您的期望。

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

  private int code;

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

  public int getCode() {
    return code;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM