Имеется Строка String Packet в которой записываетются данные а-ля FA0023CC и массив byte[] P = new byte[Packet.length()/2]в который нужно загнать данные по типу 0xFA 0x00 0x23 0xCC
Пишу байты таким способом:
P[i]= (byte) ((Character.digit(Packet.charAt(i*2), 16) << 4) + Character.digit(Packet.charAt(i*2+1), 16));
где i - номер байта, всё считывается корректно пока не сталкиваюсь с байтами больше 7F, начиная с 80 они почему то становятся отрицательтными и идут в обратную сторону (если переводить 0х80, 0х81, 0х82 в int, то будет не 128, 129, 130, а -128, -127, -126 и т.д.)
Поскольку вы сравниваете тип byte с типом int, то для чисел больше 127 возникает следующая проблема - несмотря на внешнюю похожесть, это разные числа:
byte это -1 (двоичное представление - 11111111).int (тип чисел по умолчанию) это 255 (двоичное представление - 24нуля11111111).Решить проблему можно двумя способами:
byte в int, т.е. дописать спереди 24 нуля. В данном случае особого смысла нет, потому что нас интересуют только отрицательные числа, а с ними как раз и будет заморока.Конвертировать int в byte (т.е. попросту отбросить первые 24 нуля). Вот так:
(P[i] == (byte) 0xFF)
Сборка персонального компьютера от Artline: умный выбор для современных пользователей