Полное руководство по работе с неподписанными байтами в Java:
(Источник для этого ответа.)
Язык Java не предоставляет ничего похожего на unsigned
ключевое слово. A byte
согласно спецификации языка представляет значение в диапазоне от -128 до 127. Например, если a byte
приведен к int
Java, он будет интерпретировать первый бит как знак и использовать расширение знака .
При этом ничто не мешает вам рассматривать byte
просто как 8 бит и интерпретировать эти биты как значение между 0 и 255. Просто имейте в виду, что вы ничего не можете сделать, чтобы навязать свою интерпретацию чужому методу. Если метод принимает a byte
, то этот метод принимает значение в диапазоне от -128 до 127, если явно не указано иное.
Вот пара полезных преобразований / манипуляций для вашего удобства:
Преобразования в / из 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
(Или, если вы используете Java 8+, используйте Byte.toUnsignedInt
.)
Разбор / форматирование
Лучший способ - использовать приведенные выше преобразования:
// Parse an unsigned byte
byte b = (byte) Integer.parseInt("200");
// Print an unsigned byte
System.out.println("Value of my unsigned byte: " + (b & 0xFF));
Арифметика
Представление из 2-х «просто работает» для сложения, вычитания и умножения:
// 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
Деление требует ручного преобразования операндов:
byte ratio = (byte) ((b1 & 0xFF) / (b2 & 0xFF));