Я намагаюсь перетворити рядок, який має шістнадцятковий код із шістнадцятковим кодом, у ціле число, щоб я міг робити порівняння 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
воно відображається на від’ємне число.