在Java中是否有一种将字节转换为布尔数组的方法?

3
我正在尝试编写一个TCP服务器/客户端程序,用于传输一串由4个字节组成的流。一旦客户端接收到这4个字节,我希望将每个接收到的字节转换为一个boolean[8]。是否有方法可以做到这一点?我可以成功地从服务器将4个字节传输到客户端,并且客户端接收到的每个字节的值与传输到服务器的值相匹配。我已经确定了客户端上我编写的转换方法中的错误,下面是该方法的剪贴板,如果需要,我可以发布更多代码。
样例输入======(-2 11111110) (-10 11110110) (-2 11111110) (-2 11111110)
实际输出====(-2 11111110) (-10 11110110) (-2 11111110) (-2 11111110)
期望输出==(-2 11111110) (-10 11110110) (-2 11111110) (-2 11111110) [与输入相同]
public static boolean[] byteToBoolArr(byte x) {
    boolean[] boolArr = new boolean[8];
    boolArr[0] = ((x & 0x01) != 0);
    boolArr[1] = ((x & 0x02) != 0);
    boolArr[2] = ((x & 0x04) != 0);
    boolArr[3] = ((x & 0x08) != 0);

    boolArr[4] = ((x & 0x16) != 0);
    boolArr[5] = ((x & 0x32) != 0);
    boolArr[6] = ((x & 0x64) != 0);
    boolArr[7] = ((x & 0x128) != 0);
    return boolArr;
}

2
将来,如果您提供样例输入、期望输出和实际输出会非常有用。 - Jon Skeet
@JonSkeet 谢谢您的提示,我现在会编辑我的问题,并在将来记得提供这个。 - trawww
2个回答

7
您使用0x来指定十六进制值,但后面仍然使用十进制数字。虽然0x08等于8,但是0x16并不等于16。请尝试:
boolArr[4] = ((x & 0x10) != 0);
boolArr[5] = ((x & 0x20) != 0);
boolArr[6] = ((x & 0x40) != 0);
boolArr[7] = ((x & 0x80) != 0);

2
实际上,有更加优美的方法来完成它。
public static boolean[] byteToBoolArr(byte b) {
    boolean boolArr[] = new boolean[8];
    for(int i=0;i<8;i++) boolArr[i] = (b & (byte)(128 / Math.pow(2, i))) != 0;
    return boolArr;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接