我已经拿起了这个将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;
}
但在讨论论坛中,我已经看到,通过这种方法,我们不会得到所有的位,因为我们将在每次计算时丢失一位.这是真的?我们需要修改上面的方法吗?
Jon*_*eet 15
不,那没关系.帖子上的评论与帖子中的另一段代码有关,从字节数组转换为BitSet.不可否认,我会使用更多的空白.
此外,最终可能会有一个比它需要的更长的阵列.数组创建表达式可以是:
byte[] bytes = new byte[(bits.length() + 7) / 8];
这为需要的位数提供了空间,但不再需要.基本上它相当于"除以8,但总是向上舍入."
小智 10
如果由于字节序问题而需要以相反的顺序使用BitSet,请更改:
bytes [bytes.length-i/8-1] | = 1 <<(i%8);
至:
bytes [i/8] | = 1 <<(7-i%8);
| 归档时间: | 
 | 
| 查看次数: | 15181 次 | 
| 最近记录: |