小编Bar*_*uda的帖子

字节值与十六进制的比较

我在比较字节值时遇到了问题。理论上,以下代码片段应该返回true,但它返回false

public static void main(String [] args) {
    byte a = 3;
    if (MpegUtil.isSlice(a) == true) {
        System.out.print("Yes");
    }
    else System.out.print("No");
}

public static boolean isSlice(byte ID) {
    if (ID >= 1 && ID <= (byte) 0xaf) return true;
    else return false;
}
Run Code Online (Sandbox Code Playgroud)

该函数的作用isSlice是:接收一个字节,如果它在 1 和 af(十六进制)之间,则返回 true,否则返回值为 False。但不知怎的,它回答了 3,未能通过我的测试false

有谁知道为什么这个功能不起作用?

编辑:感谢您提出删除“字节”转换的建议,它确实允许代码运行,但是一旦比较值优于或等于“0x80”,结果就会变回错误的“假”。我知道这是由于 Java 认为字节是有符号的(现在我真的很期待 Java 8),但是除了将条件更改为:之外,还会有任何“更干净”的版本吗?

if (ID != 0 && ID >= (byte) 0xaf && ID <= (byte) 0x7f) return true …
Run Code Online (Sandbox Code Playgroud)

java hex byte

2
推荐指数
1
解决办法
3678
查看次数

标签 统计

byte ×1

hex ×1

java ×1