Повне керівництво по роботі з непідписаними байтами на 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));
Арифметика
Представлення з двома доповненнями "просто працює" для додавання, віднімання та множення:
// 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));