BitSet和Byte Array值从相反方向获取SET

时间:2011-06-01 15:30:18

标签: java byte bitset

我有:

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方法有问题吗? 请建议。 感谢

2 个答案:

答案 0 :(得分:0)

您没有提供BitComp的代码,但在我看来,您确定如何将位转换为字节以及打印字节的顺序。

完全由你来决定你要设置或打印出来的东西。

答案 1 :(得分:0)

只需在您的Set中添加一些数学:((byteNumber * 8)+(7-bitNumber))