Sto cercando di convertire una stringa lunga 8 caratteri di codice esadecimale in un numero intero in modo da poter eseguire il confronto int invece di confronti di stringhe su molti valori diversi.
So che è abbastanza banale in C ++ ma ho bisogno di farlo in Java. Il test case che devo soddisfare è essenzialmente quello di convertire "AA0F245C" in int e poi di nuovo in quella stringa in modo che io sappia che sta convertendo correttamente.
Ho provato quanto segue:
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
Ho anche provato a farlo due caratteri alla volta e moltiplicando i risultati, che la conversione funziona ma il numero non è corretto.
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.
Non posso usare le librerie di terze parti solo per quello che sai, quindi questo deve essere fatto nelle librerie standard di Java.
Grazie in anticipo per il tuo aiuto.
0xAA0F245C = 2853119068
maInteger.MAX_VALUE = 0x7fffffff = 2147483647
Integer.parseUnsignedInt("value",radix)
metodo che serve al tuo scopo. Se il valore è maggiore Integer.MAX_VALUE
viene mappato a un numero negativo.