我选择了这个将 BitSet 转换为字节数组的示例。
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;
}
但是我在论坛上看到,通过这种方法我们不会得到所有的位,因为每次计算我们都会丢失一位。这是真的?需要修改上面的方法吗?
最佳答案
不,没关系。该帖子的评论与帖子中的其他 代码片段相关,从字节数组转换为BitSet
。诚然,我会使用更多的空格。
此外,这可能会导致一个比所需长度更长的数组。数组创建表达式可以是:
byte[] bytes = new byte[(bits.length() + 7) / 8];
这为所需的位数提供了空间,但仅此而已。基本上它等同于“除以 8,但总是四舍五入。”
关于java - 从 BitSet 转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6197411/