位数组到字节数组

时间:2017-03-20 21:08:09

标签: java performance

如何将以下位数组转换为字节数组?

int[] bits = new int[]{1, 0, 1, 0, 1, 1, 0, 1, 0, 1};

这些位应映射到字节,如下所示:

1010110101 -> 10101101 01000000 (0xAD 0x40)

1 个答案:

答案 0 :(得分:1)

public class TestBitToByteEncoder {

    public static void main(String[] args) {
        int[] bits = new int[]{1, 0, 1, 0, 1, 1, 0, 1, 0, 1};
        byte[] bytes = encodeToByteArray(bits);
    }

    private static byte[] encodeToByteArray(int[] bits) {
        byte[] results = new byte[(bits.length + 7) / 8];
        int byteValue = 0;
        int index;
        for (index = 0; index < bits.length; index++) {

            byteValue = (byteValue << 1) | bits[index];

            if (index %8 == 7) {
                results[index / 8] = (byte) byteValue;
            }
        }

        if (index % 8 != 0) {
            results[index / 8] = (byte) byteValue << (8 - (index % 8));
        }

        return results;
    }
}

编辑:如果您愿意以字节的形式存储相反顺序的位:

private static byte[] encodeToByteArray(int[] bits) {
    BitSet bitSet = new BitSet(bits.length);
    for (int index = 0; index < bits.length; index++) {
        bitSet.set(index, bits[index] > 0);
    }

    return bitSet.toByteArray();
}