如何检查Hex-String中是否设置了位?

时间:2012-04-25 14:10:33

标签: java hex bit-manipulation

...移

我要做点什么,这会扭曲我的想法。

我得到一个十六进制值作为字符串(例如:“AFFE”)并且必须决定,如果设置了字节1的第5位。

public boolean isBitSet(String hexValue) {
    //enter your code here
    return "no idea".equals("no idea")
}

任何提示?

问候,

Boskop

4 个答案:

答案 0 :(得分:7)

最简单的方法是将String转换为int,并使用位算术:

public boolean isBitSet(String hexValue, int bitNumber) {
    int val = Integer.valueOf(hexValue, 16);
    return (val & (1 << bitNumber)) != 0;
}               ^     ^--- int value with only the target bit set to one
                |--------- bit-wise "AND"

答案 1 :(得分:1)

假设字节一由最后两位数字表示,字符串大小固定为4个字符,那么答案可能是:

return (int)hexValue[2] & 1 == 1;

如您所见,您不需要将整个字符串转换为二进制以评估第5位,它确实是第3个字符的LSB。

现在,如果十六进制字符串的大小是可变的,那么您需要以下内容:

return (int)hexValue[hexValue.Length-2] & 1 == 1;

但由于字符串的长度小于2,因此更安全:

return hexValue.Length < 2 ? 0 : (int)hexValue[hexValue.Length-2] & 1 == 1;

正确答案可能因您认为是字节1和第5位而异。

答案 2 :(得分:0)

这个怎么样?

 int x = Integer.parseInt(hexValue);
 String binaryValue = Integer.toBinaryString(x);

然后你可以检查String来检查你关心的特定位。

答案 3 :(得分:0)

使用BigInteger及其testBit内置函数

static public boolean getBit(String hex, int bit) {
    BigInteger bigInteger = new BigInteger(hex, 16);
    return bigInteger.testBit(bit);
}