How to convert BitSet to binary string effectively?

和自甴很熟 提交于 2019-12-01 03:58:53

问题


I am looking for an efficient way how to easily convert a BitSet to a binary string. Let us say that its usual length would be thousands of bits.

For example, lets have this:

BitSet bits = new BitSet(8);
bits.set(1);
bits.set(3);

And this is the desired result:

String result = toBinaryString(bits);
// expected: result = "01010000"

I have some ideas in general (streams, etc.), but there might be some obvious standard method I am just missing.


回答1:


So this is the most efficient way I have tried so far:

private static class FixedSizeBitSet extends BitSet {
    private final int nbits;

    public FixedSizeBitSet(final int nbits) {
        super(nbits);
        this.nbits = nbits;
    }

    @Override
    public String toString() {
        final StringBuilder buffer = new StringBuilder(nbits);
        IntStream.range(0, nbits).mapToObj(i -> get(i) ? '1' : '0').forEach(buffer::append);
        return buffer.toString();
    }
}

Or other way using more streams:

@Override
public String toString() {
    return IntStream
            .range(0, nbits)
            .mapToObj(i -> get(i) ? '1' : '0')
            .collect(
                    () -> new StringBuilder(nbits),
                    (buffer, characterToAdd) -> buffer.append(characterToAdd),
                    StringBuilder::append
            )
            .toString();
}



回答2:


String bitsStr = String.format("%8s", Integer.toBinaryString(bits.toByteArray()[0] & 0xFF)).replace(' ', '0');



来源:https://stackoverflow.com/questions/34748006/how-to-convert-bitset-to-binary-string-effectively

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!