我在下面的代码中使用以下枚举类型:
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会以负数返回?
答案 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;
}
}