Ключевым моментом, который вам здесь не хватает, является то, что при передаче параметра it
в String#format
это значение равно десятичное int
, а не шестнадцатеричное int
.
Вместо этого вы хотите отобразить значение в массиве непосредственно в строку, а затем получить его десятичное значение:
byte it = 14;
int x = Integer.parseInt(String.valueOf(it), 16);
System.out.println(x); // This will print 20
Это должно получить ожидаемый результат.
Обратите внимание, что ваша проблема немного сбивает с толку, потому что числа в вашем байтовом массиве являются десятичными числами ... уже в их шестнадцатеричном «формате».Существует несколько способов устранения этой путаницы (при условии, что вы контролируете тип и / или содержимое массива):
- Используйте
String
вместо byte
String it = "14";
int x = Integer.parseInt(it, 16);
System.out.println(x); // This will print 20
- Сохранять значения в шестнадцатеричном виде и по-прежнему преобразовывать (т. Е. Ставить
0x
перед каждым числом)
byte it = 0x14;
int x = Integer.parseInt(String.format("%02X", it), 16);
System.out.println(x); // This will print 20
- Сохранять значения в шестнадцатеричном видеи не конвертируйте, потому что в этом нет необходимости
byte it = 0x14;
System.out.println(it); // This will print 20
Если вы пойдете со второй пулей, хотя и запутанно, то, что у вас есть сейчас, должно работать, но третий вариант будет лучше, еслиВы жестко кодируете значения байтового массива.