J'essaie de convertir une chaîne de 8 caractères de code hexadécimal en un entier afin de pouvoir faire une comparaison int au lieu de comparaisons de chaînes sur un grand nombre de valeurs différentes.
Je sais que c'est assez trivial en C ++ mais je dois le faire en Java. Le cas de test que je dois satisfaire est essentiellement de convertir "AA0F245C" en int, puis de revenir à cette chaîne pour que je sache que la conversion est correcte.
J'ai essayé ce qui suit:
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
J'ai également essayé de le faire deux caractères à la fois et de multiplier les résultats, ce que la conversion fonctionne mais le nombre n'est pas correct.
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.
Je ne peux pas utiliser de bibliothèques tierces juste pour que vous le sachiez, donc cela doit être fait dans les bibliothèques standard Java.
Merci d'avance pour votre aide.
0xAA0F245C = 2853119068
butInteger.MAX_VALUE = 0x7fffffff = 2147483647
Integer.parseUnsignedInt("value",radix)
méthode qui sert votre objectif. Si la valeur est supérieure à Integer.MAX_VALUE
celle-ci, elle est mappée à un nombre négatif.