2012-08-03 6 views
5

Sto scrivendo un metodo in cui sto convertendo i valori int in stringhe binarie e memorizzandoli. Sto usando il metodo Integer.toBinaryString per farlo, e funziona correttamente, ma il problema è che ho bisogno del metodo per restituire esattamente 4 bit nella stringa anziché meno (non sarà mai più perché i numeri non sono abbastanza grandi). Ecco un esempio del mio codice e dove si verifica il problema:Come rendere Integer.toBinaryString restituisce almeno 4 bit

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

Chiaramente, questo genera un ArrayOutOfBoundsException perché strValue5 == 11 e non 0011, come ha bisogno di essere. Spero che questo sia sufficientemente chiaro. Grazie in anticipo per l'aiuto.

+0

Generalmente prendo il risultato, aggiungo un gruppo di zeri in più alla parte anteriore, quindi prendo la "coda" per la lunghezza desiderata. Non richiede calcolo. –

+0

Buona chiamata - lo farò –

+1

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

risposta

1

Se il tuo valore avrà sempre esattamente 4 bit, allora sarà abbastanza piccolo da utilizzare una tabella di ricerca per i 16 valori in questione. La correzione di eventuali errori nel mio Java è lasciata come esercizio per il lettore.

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

Non sto garantire tale è il metodo più efficiente, ma si può sempre fare il proprio metodo che chiama Integer.toBinaryString e formati in modo appropriato:

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

Tenete a mente I didn' t conto della situazione in cui il valore che stai inviando richiede più bit da rappresentare in binario della lunghezza che fornisci.

4

Un trucco per restituire almeno 4 cifre è un numero di 5 cifre e tagliare la prima cifra.

String strValue5 = Integer.toBinaryString(value5 + 0b10000).substring(1); 
Problemi correlati