【发布时间】:2023-03-20 09:03:01
【问题描述】:
我通过 Java 中的套接字连接发送 byte[] 数组。
我有一个很长的boolean[] 数组,其中array.length % 8 == 0。
我想将这个boolean[] 数组转换为一个元素少8 倍的byte[] 数组,这样我就可以通过套接字连接发送byte[]。
boolean[] 数组如下所示:01011010 10101010 01100011 11001010 等
在这种情况下,byte[] 应如下所示:0x5A 0xAA 0x63 0xCA。
我在另一个问题上找到了一些代码,关于如何将单个 byte 转换为 boolean[] 数组,并在此处添加了一个新方法来转换整个数组:
public static boolean[] booleanArrayFromByteArray(byte[] x) {
boolean[] y = new boolean[x.length * 8];
int position = 0;
for(byte z : x) {
boolean[] temp = booleanArrayFromByte(z);
System.arraycopy(temp, 0, y, position, 8);
position += 8;
}
return y;
}
public static boolean[] booleanArrayFromByte(byte x) {
boolean bs[] = new boolean[4];
bs[0] = ((x & 0x01) != 0);
bs[1] = ((x & 0x02) != 0);
bs[2] = ((x & 0x04) != 0);
bs[3] = ((x & 0x08) != 0);
return bs;
}
我想知道是否有更有效的方法。
编辑:谢谢
【问题讨论】:
-
反过来就是……好吧,反过来。您分配一个
x.length / 8字节数组,并使用for循环和|=适当地填充它们。 -
为什么你的
booleanArrayFromByte(byte)只返回 4 位? -
@ElliottFrisch 好点。我忘记改了
-
请查看我的答案,更短更高效的解决方案。
标签: java arrays boolean byte bytearray