Имеется Строка 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)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Можно ли сделать одну int переменную из listget(count-1))
CyclePagerIndicator в проект добавить нужноНа гитхабе и вообще нашел лишь зависимость к мавен
Имеется 2 мапы, в одной 120 элементов, в другой 40Идет перебор, то есть сначала перебираются все элементы мапы 2 с первым элементом первой мапы,...