2011-02-02 21 views
5

Duplicar posible:?
BitSet to and from integer/longConvierte BitSet a int

Cómo convertir clase BitSet clase a int (siempre tengo Bitset (8) ¿Hay alguna forma fácil o yo necesita recorrer el conjunto de bits?

+1

¿Qué tipo de conversión espera para un 'BitSet' arbitrariamente grande? –

+1

No es realmente un duplicado. La otra pregunta muestra cómo crear un conjunto de bits de una forma larga, no de la otra. – dogbane

+1

La otra pregunta requiere 'hacia y desde', por lo que cubre esta pregunta, pero lamentablemente la respuesta superior solo cubre la conversión de un int a un BitSet. – Joel

Respuesta

1

Dado que no puede acceder a los valores directamente mediante la API de conjuntos de bits, debe iterar así:

public static void main(String[] args) { 
     BitSet bs = new BitSet(); 
     bs.set(5); 
     System.out.println(bs); 
     int res = 0, pow = 1; 

     for (int i = 0 ; i < 32 ; i++ , pow <<= 1) { 
      if (bs.get(i)) { 
       res |= pow; 
      } 
     } 
     System.out.println("" + res); 
    } 
5

Esto debe hacerlo ...

public static int bitSetToInt(BitSet bitSet) 
{ 
    int bitInteger = 0; 
    for(int i = 0 ; i < 32; i++) 
     if(bitSet.get(i)) 
      bitInteger |= (1 << i); 
    return bitInteger; 
} 

supongo que se podría utilizar nextSetBit para que sea más eficiente, pero eso es una exageración, se prolly añadir más sobrecarga que ayuda ...

+0

Hará iteraciones inútiles para el conjunto de bits OP del tamaño 8. – dogbane

+0

@dogbane, touché ....: P – st0le

2

Pruebe:

int result = 0 ; 
    for(int i = 0 ; i < bitSet.length() ; i++){ 
     if(bitSet.get(i)){ 
      result |= (1 << i); 
     } 
    } 
    result &= Integer.MAX_VALUE; 
    return result; 
+1

Hará iteraciones inútiles para bitsets grandes ... – st0le

+0

y en segundo lugar, '' bitSet.size() '... no 'length()' – st0le

+0

@ st0le OP dijo 'BitSet (8)' – dogbane