2017-01-18 5 views
1

Je suis en train de convertir la chaîne 9C72E0FA11C2E6A8 à valeur décimale:Convertir une chaîne avec valeur hexadécimale d'un très grand nombre

   String strHexNumber = "9C72E0FA11C2E6A8"; 
      Long decimalNumber = Long.parseLong(strHexNumber, 16); 
      System.out.println("Hexadecimal number converted to decimal number"); 
      System.out.println("Decimal number is : " + decimalNumber); 

Je me attendais à obtenir une valeur 11273320181906204328, mais je suis

Exception in thread "main" java.lang.NumberFormatException: For input string: "9C72E0FA11C2E6A8" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Long.parseLong(Long.java:592) 
    at ConvertHexToDecimalExample.main(ConvertHexToDecimalExample.java:22) 

Comment puis-je convertir un hexagone en décimal en Java?

Merci!

+0

Le nombre est nettement plus grande qu'une longue, donc l'utilisation 'parseLong' ne fonctionnera pas. Essayez ['BigInteger (String, int)'] (https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html#BigInteger (java.lang.String,% 20int)) . –

Répondre

6

Utiliser un BigInteger passe la valeur de chaîne comme argument et envoyer le radix comme paramètre

String strHexNumber = "9C72E0FA11C2E6A8"; 
BigInteger mySuperBigInteger = new BigInteger(strHexNumber , 16); 
0

De Java API document for BigInteger:

public BigInteger(String val, int radix) 

traduit la représentation de chaîne d'un BigInteger dans le spécifié radix dans un BigInteger. La représentation sous forme de chaîne est constituée d'un signe moins ou plus optionnel suivi d'une séquence d'un ou de plusieurs chiffres dans la base spécifiée. Le mappage de caractère à chiffre est fourni par Character.digit. La chaîne ne peut contenir aucun caractère étranger (espace, par exemple).

Dans votre cas, vous pouvez le faire comme ceci:

BigInteger bigInt = new BigInteger(strHexNumber, 16);