Java 从相反方向设置位集和字节数组值

Java 从相反方向设置位集和字节数组值,java,byte,bitset,Java,Byte,Bitset,我有: public byte[] bytes = new byte[5]; //BitComp Class public BitSet bits = new BitSet(40); 以及名为BitComp的类中的getter和setter。下面的类将所有前8位设置为1字节[0]。然后将所有字节转换为位集。之后,当它将第二位设置为true并同时打印它们时 import java.util.BitSet; public class TestBitSet { public voi

我有:

public byte[] bytes = new byte[5];     //BitComp Class
public BitSet bits = new BitSet(40);
以及名为BitComp的类中的getter和setter。下面的类将所有前8位设置为1字节[0]。然后将所有字节转换为位集。之后,当它将第二位设置为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();
    }

}
输出:00000000000000000000000000111111111 0100000000000000000000000000000000000011111

不应该有任何更改,因为字节[0]包含前8个元素,我正在使用位集操作将第2个元素设置为1。 所以位集是从LHS接近的,字节数组是从RHS存储的。如何处理这个问题?getBitsFromByte方法中是否存在问题? 请建议。
感谢您没有提供BitComp的代码,但是我觉得您可以决定如何将位转换为字节以及打印字节的顺序


设置或打印内容的顺序完全取决于您。

只需在设置中添加一点数学:byteNumber*8+7位数字

这与打印值的顺序无关。我想修改第一位的值,即[1,1,1,1,1,1,1,1,1,1,0,0,0……],但它是从另一端修改的。在getBitsFromByte中,第一个字节由最低位组成,因此当设置位1时,就是在第一个字节中设置一个位。如果您希望位到字节以另一种方式排列,则必须更改从一种方式转换为另一种方式。但是,我会假设最低位转换为最低索引字节,因此它的工作方式与我的相同。字节数组的第0位、第1位是位集类的第78位和第79位。。那是什么?