我有:
public byte[] bytes = new byte[5]; //BitComp Class
public BitSet bits = new BitSet(40);
和类中的getter和setter命名为BitComp。下面的类将所有前8位设置为1(byte [0])。之后它将所有字节转换为BitSet。之后,它将第二位设置为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&lt; - 0th
0th-&GT; 0100000000000000000000000000000011111111
不应该有任何更改,因为byte [0]包含前8个元素,我使用BitSet操作将第2个元素设置为1。 所以BitSet正从LHS接近,Byte数组从RHS存储。如何解决这个问题? getBitsFromByte方法有问题吗? 请建议。 感谢
答案 0 :(得分:0)
您没有提供BitComp的代码,但在我看来,您确定如何将位转换为字节以及打印字节的顺序。
完全由你来决定你要设置或打印出来的东西。
答案 1 :(得分:0)
只需在您的Set中添加一些数学:((byteNumber * 8)+(7-bitNumber))