у меня есть:
public byte[] bytes = new byte[5]; //BitComp Class
public BitSet bits = new BitSet(40);
и методы получения и установки в классе с именем BitComp. Следующий класс устанавливает все первые 8 битов в 1 (byte [0]), после чего он преобразует все байты в BitSet. Теперь после этого, когда он устанавливает 2-й бит в true и печатает их обоих.
import java.util.BitSet;
public class TestBitSet {
public void testBit(){
BitComp comp = new BitComp();
comp.bytes[0] |= 0xFF;
comp.setBits(getBitsFromByte(comp.getBytes()));
System.out.println(toCharArray(comp.getBits()));
BitSet bs = comp.getBits();
bs.set(1,true);
comp.setBits(bs);
System.out.println(toCharArray(comp.getBits()));
}
private BitSet getBitsFromByte(byte[] barray)
{
BitSet bits=new BitSet();
if(barray!=null)
{
for (int i=0; i<barray.length*8; i++)
{
if ((barray[barray.length-i/8-1]&(1<<(i%8)))!= 0)
{
bits.set(i);
}
}
}
return bits;
}
public static char[] toCharArray(final BitSet bs)
{
final int length = bs.length();
final char[] arr = new char[length];
for(int i = 0; i < length; i++)
{
arr[i] = bs.get(i) ? '1' : '0';
}
return arr;
}
public static void main(String args[]){
TestBitSet tbs = new TestBitSet();
tbs.testBit();
}
}
Вывод: 0000000000000000000000000000000011111111 <- 0th <br>
0-> 0100000000000000000000000000000011111111
Не должно быть никаких изменений, поскольку байт [0] содержит первые 8 элементов, и я устанавливаю 2-й элемент как 1 с помощью операции BitSet.
Итак, BitSet приближается из LHS, а байтовый массив хранится из RHS. Как подойти к этой проблеме? Есть ли проблема в методе getBitsFromByte?
Пожалуйста, Предложите.
Спасибо