私は持っている:
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();
}
}
出力:00000000000000000000000000000011111111 <- 0th
0th-> 01000000000000000000000000000011111111
byte[0] には最初の 8 つの要素が含まれており、BitSet 操作で 2 番目の要素を 1 に設定しています。そのため、BitSet は LHS から近づき、Byte 配列は RHS から格納されます。この問題にアプローチするには?getBitsFromByte メソッドに問題はありますか? 提案してください。ありがとう