2012-08-03 39 views
5

Estoy escribiendo un método en el que estoy convirtiendo valores int en cadenas binarias y almacenándolos. Estoy usando el método Integer.toBinaryString para hacerlo, y está funcionando correctamente, pero el problema es que necesito el método para devolver exactamente 4 bits en la cadena en lugar de menos (nunca será más porque los números no son lo suficientemente grandes) He aquí un ejemplo de mi código y dónde se produce el problema:Cómo hacer que Integer.toBinaryString devuelva al menos 4 bits

int value5 = 3; 
String strValue5 = Integer.toBinaryString(value5); 
for(int index = 0; index < 4; index++){ 
    sBoxPostPass[4][index] = strVal5.charAt(index); 
} 

Claramente, esto generará un ArrayOutOfBoundsException porque strValue5 == 11 y no 0011, como tiene que ser. Espero que esto sea suficientemente claro. Gracias de antemano por la ayuda.

+0

Generalmente tomo el resultado, agrego un montón de ceros adicionales al frente, luego tomo la "cola" para la longitud deseada. No requiere cómputo. –

+0

Buena llamada - Haré eso –

+1

http://stackoverflow.com/questions/4421400/how-to-get-0-padded-binary-representation-of-an-integer-in-java – MacAnthony

Respuesta

1

Si su valor siempre tendrá exactamente 4 bits, entonces es lo suficientemente pequeño como para usar una tabla de consulta para los 16 valores en cuestión. La corrección de cualquier error en mi Java se deja como un ejercicio para el lector.

static String binary4[16] = {"0000", /* another exercise for the reader */, "1111"}; 
static String toBinary4(int value) { 
    return binary4[value & 0xF]; 
} 
2

No estoy garantizar este es el método más eficiente, pero siempre se puede hacer su propio método que llama Integer.toBinaryString y aplica el formato correspondiente:

public static String toBinaryStringOfLength(int value, int length) { 
    String binaryString = Integer.toBinaryString(value); 
    StringBuilder leadingZeroes = new StringBuilder(); 
    for(int index = 0; index < length - binaryString.length(); index++) { 
     leadingZeroes = leadingZeroes.append("0"); 
    } 

    return leadingZeroes + binaryString; 
} 

Tenga en cuenta Yo no t cuenta para la situación en la que el valor que está enviando requiere más bits para representar en binario que la longitud que proporciona.

4

Un truco para devolver al menos 4 dígitos es tener un número de 5 dígitos y cortar el primer dígito.

String strValue5 = Integer.toBinaryString(value5 + 0b10000).substring(1); 
Cuestiones relacionadas