[英]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.