我已经拿起了这个将BitSet转换为Byte数组的例子。
public static byte[] toByteArray(BitSet bits) {
byte[] bytes = new byte[bits.length()/8+1];
for (int i=0; i<bits.length(); i++) {
if (bits.get(i)) {
bytes[bytes.length-i/8-1] |= 1<<(i%8);
}
}
return bytes;
}
但是在讨论论坛中,我已经看到通过这种方法我们不会得到所有的比特,因为我们每次计算都会失去一点。这是真的?我们需要修改上述方法吗?
答案 0 :(得分:15)
不,那没关系。帖子上的评论与帖子中的其他代码有关,从字节数组转换为BitSet
。不可否认,我会使用更多的空白。
此外,最终可能会有一个比它需要的更长的数组。数组创建表达式可以是:
byte[] bytes = new byte[(bits.length() + 7) / 8];
这为需要的位数提供了空间,但不再需要。基本上它相当于“除以8,但总是向上舍入。”
答案 1 :(得分:10)
如果由于字节序问题需要反向顺序的BitSet,请更改:
bytes [bytes.length-i / 8-1] | = 1&lt;&lt;(i%8);
为:
bytes [i / 8] | = 1&lt;&lt;(7-i%8);
答案 2 :(得分:3)
这对我来说很好。如果您使用的是Java 1.7,则它具有method toByteArray()
。
答案 3 :(得分:1)
仅供参考,使用
bits.length()
获取bitset的大小可能会返回不正确的结果;我不得不修改原始示例以利用size()方法获取bitset的已定义大小(而length()返回set set的位数)。有关详细信息,请参阅以下主题。