Я попытался преобразовать байтовый массив, чтобы использовать его битовое представление.
Ввод:
byte[] values = new byte[]{21, 117, 41, -1};
Я хотел бы создать один объект BitSet из байтового массива, но я разделил его, чтобы исследовать проблему, и попытался создать несколько BitSetобъекты из каждого элемента массива.
Объекты BitSet создаются следующим образом:
BitSet bitSetTwentyOne = BitSet.valueOf(new byte[]{21});
BitSet bitSetOneHundredSevenTeen = BitSet.valueOf(new byte[{117});
BitSet bitSetFourtyOne = BitSet.valueOf(new byte[]{41});
BitSet bitSetMinusOne = BitSet.valueOf(new byte[]{-1});
Биты распечатываются с использованием следующегоМетод:
private String getBits(BitSet bitSet) {
StringBuilder bitsBuilder = new StringBuilder();
for (int i = 0; i < bitSet.length(); i++) {
bitsBuilder.append(bitSet.get(i) == true ? 1 : 0);
}
return bitsBuilder.toString();
}
Вывод:
bitSetTwentyOne: 10101 but expected -> 00010101 (BitSet::length = 5)
bitSetOneHundredSevenTeen: 1010111 but expected -> 01110101 (BitSet::length = 7)
bitSetFourtyOne: 100101 but expected -> 00101001 (BitSet::length = 6)
bitSetMinusOne: 11111111 but it is as expected at least (BitSet::length = 8)
Я хочу, чтобы все значения имели ширину 8 бит, даже если это необходимо для заполнения нулями.Я не понимаю, почему он дает неправильные двоичные значения в случае преобразования 117 и 41 .