Próbuję przekonwertować ciąg znaków o długości 8 znaków z kodu szesnastkowego na liczbę całkowitą, aby umożliwić porównanie zamiast porównywania ciągów w wielu różnych wartościach.Konwertuj ciąg szesnastkowy na int
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 zamianie "AA0F245C" na int, a następnie z powrotem na ten ciąg, aby wiedzieć, że konwersja jest właściwa.
Próbowałem następujące:
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ż robi to dwie postacie naraz i mnożąc wyniki, w której pracuje, ale liczba konwersji nie jest słuszne.
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 stron trzecich, więc wiesz, więc to musi być zrobione w standardowych bibliotekach Java.
Dziękuję za pomoc z góry.
Ty mnożą się, kiedy powinna być przesuwanie. –
'0xAA0F245C = 2853119068' ale' Integer.MAX_VALUE = 0x7fffffff = 2147483647' – Pshemo
Wiem, że pytanie istnieje już od dwóch lat. Jednak java 8 umożliwia inne rozwiązanie. Dodali metodę 'Integer.parseUnsignedInt (" value ", radix)', która służy twojemu celowi. Jeśli wartość jest większa niż "Integer.MAX_VALUE", jest odwzorowana na liczbę ujemną. – John