0

私は持っている:

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 メソッドに問題はありますか? 提案してください。ありがとう

4

2 に答える 2

0

あなたは BitComp のコードを提供していませんが、ビットをバイトに変換する方法と、バイトを出力する順序を決定しているように見えます。

どのようなものを設定または印刷するかは、完全にあなた次第です。

于 2011-06-01T15:38:52.720 に答える