Я пытаюсь преобразовать строку длиной 8 символов шестнадцатеричного кода в целое число, чтобы я мог выполнять сравнение int вместо сравнения строк по множеству разных значений.
Я знаю, что в C ++ это довольно тривиально, но мне нужно сделать это на Java. Тестовый пример, который мне нужно удовлетворить, по сути состоит в том, чтобы преобразовать «AA0F245C» в int, а затем обратно в эту строку, чтобы я знал, что преобразование выполняется правильно.
Я пробовал следующее:
int decode = Integer.decode("0xAA0F245C"); // NumberFormatException
int decode2 = Integer.decode("AA0F245C"); //NumberFormatException
int parseInt = Integer.parseInt("AA0F245C", 16); //NumberFormatException
int valueOf = Integer.valueOf("AA0F245C", 16); //NumberFormatException
Я также пробовал делать это двумя символами за раз и умножать результаты, что преобразование работает, но число неправильное.
int id = 0;
for (int h = 0; h < hex.length(); h= h+2)
{
String sub = hex.subSequence(h, h+2).toString();
if (id == 0)
id = Integer.valueOf(sub, 16);
else
id *= Integer.valueOf(sub, 16);
}
//ID = 8445600 which = 80DEA0 if I convert it back.
Я не могу использовать сторонние библиотеки, чтобы вы знали, поэтому это нужно делать в стандартных библиотеках Java.
Заранее благодарю за вашу помощь.
0xAA0F245C = 2853119068
ноInteger.MAX_VALUE = 0x7fffffff = 2147483647
Integer.parseUnsignedInt("value",radix)
метод, который служит вашей цели. Если значение больше, чем Integer.MAX_VALUE
оно отображается в отрицательное число.