繁体   English   中英

从BitSet转换为Byte数组

[英]Converting from BitSet to Byte array

我已经拿起了这个将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;
}

但在讨论论坛中,我已经看到,通过这种方法,我们不会得到所有的位,因为我们将在每次计算时丢失一位。 这是真的? 我们需要修改上面的方法吗?

不,那没关系。 帖子上的评论与帖子中的一段代码有关,从字节数组转换为BitSet 不可否认,我会使用更多的空白。

此外,最终可能会有一个比它需要的更长的阵列。 数组创建表达式可以是:

byte[] bytes = new byte[(bits.length() + 7) / 8];

这为需要的位数提供了空间,但不再需要。 基本上它相当于“除以8,但总是向上舍入。”

如果由于字节序问题而需要以相反的顺序使用BitSet,请更改:

bytes [bytes.length-i / 8-1] | = 1 <<(i%8);

至:

bytes [i / 8] | = 1 <<(7-i%8);

这对我来说很好。 如果您使用的是Java 1.7,则它具有toByteArray()方法

仅供参考,使用

bits.length()

获取bitset的大小可能会返回不正确的结果; 我不得不修改原始示例以利用size()方法获取bitset的已定义大小(而length()返回set set的位数)。 有关详细信息,请参阅下面的主题。

java.util.BitSet - set()无法按预期工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM