Обновление: хотя следующий ответ является "действительным" для обычной Java, пожалуйста, обратитесь к ответу Робертса для информации, относящейся к Java Card, а также к дополнительным проблемам / подходам.
В Java byte
имеет значения в диапазоне [-128, 127]
, поэтому, когда вы говорите «160», это не , что код действительно вам дает:)
Возможно, вы хотели бы использовать:
int j = apduBuffer[4] & 0xFF;
Это увеличивает значение apduBuffer[4]
до int
, обрабатывая исходные байтовые данные как значение без знака .
Аналогично, i
также должен быть int
(чтобы избежать неприятной ошибки переполнения и петли навсегда), и метод System.arraycopy также может быть удобен ...
(Я понятия не имею, является ли это единственной / реальной проблемой - или если вышеприведенное является жизнеспособным решением для Java Card - но это точно проблема и выравнивается с указанным «пределом 128».)
Счастливого кодирования.