A byte
значение подписано, и вы используете сохраняющее подпись правое смещение.Это приведет к отрицательным значениям b
при вычислении nybble старшего разряда.
Например, рассмотрим, что ваш код делает со значением byte
-112 (0x90).При смещении вправо сначала повышается до значения int
, 0xFFFFFF90.Затем он сдвигается вправо на 4 бита, сохраняя знак, и становится 0xFFFFFFF9.Затем он возвращается к байту, который просто отбрасывает старшие 24 бита, и 0xF9 (-7 десятичное число) присваивается b
.b
не больше 9, поэтому результирующий символ (-7 + 48) или ')'.
Сделайте это вместо:
int hi = (barray[i] & 0xF0) >>> 4, lo = barray[i] & 0xF;
Использование byte
как локальная переменная не работает на 32- или 64-битной машине.Фактически, приведение к byte
является пустой инструкцией.