Guida completa per lavorare con byte senza segno in Java:
(Fonte per questa risposta.)
Java Language non fornisce nulla di simile alla unsigned
parola chiave. Un byte
secondo le specifiche del linguaggio rappresenta un valore compreso tra -128 e 127. Ad esempio, se un byte
viene cast su un int
Java interpreterà il primo bit come segno e utilizzerà l' estensione del segno .
Detto questo, nulla ti impedisce di visualizzare byte
semplicemente 8 bit e interpretarli come un valore compreso tra 0 e 255. Tieni presente che non c'è niente che puoi fare per forzare la tua interpretazione sul metodo di qualcun altro. Se un metodo accetta a byte
, allora quel metodo accetta un valore compreso tra -128 e 127, salvo diversa indicazione esplicita.
Ecco un paio di utili conversioni / manipolazioni per la tua convenienza:
Conversioni da / a int
// From int to unsigned byte
int i = 200; // some value between 0 and 255
byte b = (byte) i; // 8 bits representing that value
// From unsigned byte to int
byte b = 123; // 8 bits representing a value between 0 and 255
int i = b & 0xFF; // an int representing the same value
(Oppure, se sei su Java 8+, usa Byte.toUnsignedInt
.)
Analisi / formattazione
Il modo migliore è utilizzare le conversioni di cui sopra:
// Parse an unsigned byte
byte b = (byte) Integer.parseInt("200");
// Print an unsigned byte
System.out.println("Value of my unsigned byte: " + (b & 0xFF));
Aritmetica
La rappresentazione a 2 complementi "funziona" per addizione, sottrazione e moltiplicazione:
// two unsigned bytes
byte b1 = (byte) 200;
byte b2 = (byte) 15;
byte sum = (byte) (b1 + b2); // 215
byte diff = (byte) (b1 - b2); // 185
byte prod = (byte) (b2 * b2); // 225
La divisione richiede la conversione manuale degli operandi:
byte ratio = (byte) ((b1 & 0xFF) / (b2 & 0xFF));