119 votes

Convertir en chaîne hexadécimale à int

Je suis en train de convertir une chaîne de 8 caractères de code hexadécimal en un nombre entier de sorte que je peux faire, int comparaison 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 j'ai besoin de le faire en Java. Le cas de test j'ai besoin à satisfaire est essentiellement à Convertir "AA0F245C" int et puis de nouveau à cette chaîne, de sorte que je sais que c'est la conversion de la droite.

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 aussi essayé de faire deux caractères à la fois, et en multipliant les résultats, de la conversion fonctionne, mais le nombre n'est pas droit.

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 des bibliothèques tierces comme vous le savez, donc ce doit être fait en Java bibliothèques standard.

Je vous remercie pour votre aide à l'avance.

161voto

dystroy Points 145126

C'est tout simplement trop grand pour un int (4 octets et signé).

Utilisation

Long.parseLong("AA0F245C", 16);

20voto

Incompl Points 151

La valeur maximale que Java Integer peut gérer est 2147483657, ou 2^31-1. Le nombre hexadécimal AA0F245C est 2853119068 comme un nombre décimal, et est beaucoup trop grande, de sorte que vous devez utiliser

Long.parseLong("AA0F245C", 16);

pour le faire fonctionner.

12voto

heat Points 359

vous pouvez le faire facilement avec parseInt avec le paramètre format.

Integer.parseInt("-FF", 16) ; // returns -255

javadoc Entier

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X