2013-06-06 5 views
5

Ho una maschera di bit da memorizzare in un byte, poiché ho solo bisogno di 8 bit. Quando sto creando lo faccio come una stringa (ho pensato che sarebbe stato più facile in questo modo) e poi mi trasformo in un byte con Byte.parseByte(mask,2), ma ho trovato non funziona per certi valori:Perché Byte.parseByte ("10000001", 2) genera un NFE?

String bits="10000001"; 
Byte.parseByte(bits,2);// throws a NFE 

Ma se faccio:

byte b=(byte)0x81; //1000 0001 

non c'è nessun problema.

PS: Ho trovato una soluzione, byte b=(byte)Integer.parseInt(bits, 2); ma in ogni caso io voglio sapere perché non riesco a convertire 8 bit in un byte

+1

Risposta breve: perché 'byte' è firmato. –

+0

Sì, lo so, il primo 1 dice che è un numero negativo. Il mio punto è che non dovrebbe essere un problema. Come posso memorizzare -127 quindi, se sto ricevendo una stringa? –

risposta

7

10000001 binario è 129 decimale. Ergo, è più grande di Byte.MAX_VALUE.

La soluzione

byte b=(byte)0x81; //1000 0001 

si tradurrà in b che ha il valore -127. Lo stesso vale per la tua soluzione alternativa.

+0

Quindi la funzione Byte.parseByte non è in grado di memorizzare un determinato byte, è necessario trasformarlo in un numero precedente. Ho pensato che avrebbe fatto qualcosa come aggiungere 1s e poi spostarli. 0x81 è anche 129 ma funziona –