Значения BitSet и Byte Array получают SET в противоположном направлении - PullRequest
0 голосов
/ 01 июня 2011

у меня есть:

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();
    }

}

Вывод: 0000000000000000000000000000000011111111 <- 0th <br> 0-> 0100000000000000000000000000000011111111

Не должно быть никаких изменений, поскольку байт [0] содержит первые 8 элементов, и я устанавливаю 2-й элемент как 1 с помощью операции BitSet. Итак, BitSet приближается из LHS, а байтовый массив хранится из RHS. Как подойти к этой проблеме? Есть ли проблема в методе getBitsFromByte? Пожалуйста, Предложите. Спасибо

Ответы [ 2 ]

0 голосов
/ 16 июля 2013

Просто добавьте немного математики в ваш сет: ((byteNumber * 8) + (7-bitNumber))

0 голосов
/ 01 июня 2011

Вы не предоставляете код для BitComp, однако мне кажется, что вы определяете, как переводить биты в байты и в каком порядке их печатать.

Это полностью зависит от вас, в каком порядке вы какие вещи должны быть установлены или распечатаны.

...