Próbuję przekonwertować ciąg o długości 8 znaków kodu szesnastkowego na liczbę całkowitą, tak żebym mógł wykonać porównanie int zamiast porównywania ciągów w wielu różnych wartościach.
Wiem, że jest to dość trywialne w C ++, ale muszę to zrobić w Javie. Przypadek testowy, który muszę spełnić, polega w zasadzie na przekonwertowaniu „AA0F245C” na int, a następnie z powrotem na ten ciąg, aby wiedzieć, że konwertuje się prawidłowo.
Próbowałem następujących rzeczy:
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
Próbowałem również zrobić to po dwa znaki na raz i pomnożyć wyniki, co oznacza, że konwersja działa, ale liczba jest nieprawidłowa.
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.
Nie mogę korzystać z bibliotek innych firm, abyś wiedział, więc należy to zrobić w standardowych bibliotekach Java.
Z góry dziękuję za pomoc.
0xAA0F245C = 2853119068
aleInteger.MAX_VALUE = 0x7fffffff = 2147483647
Integer.parseUnsignedInt("value",radix)
metodę, która służy twojemu celowi. Jeśli wartość jest większa, niż Integer.MAX_VALUE
jest mapowana na liczbę ujemną.