Come convertire una stringa esadecimale in long in java?

Voglio convertire una stringa esadecimale in long in java.

Ho provato con la conversione generale.

String s = "4d0d08ada45f9dde1e99cad9"; long l = Long.valueOf(s).longValue(); System.out.println(l); String ls = Long.toString(l); 

Ma sto ricevendo questo messaggio di errore:

 java.lang.NumberFormatException: For input string: "4d0d08ada45f9dde1e99cad9" 

C’è un modo per convertire String in long in java? O sto provando quale non è realmente ansible !!

Grazie!

Long.decode(str) accetta una varietà di formati:

Accetta numeri decimali, esadecimali e ottali forniti dalla seguente grammatica:
DecodableString:

  • Iscriviti opt DecimalNumeral
  • Firma opt 0x HexDigits
  • Firma opt 0X HexDigits
  • Firma opt # HexDigits
  • Iscriviti opt 0 OctalDigits

Cartello:

Ma nel tuo caso ciò non aiuta, la tua stringa va oltre lo scopo di quanto a lungo può valere. Hai bisogno di un BigInteger :

 String s = "4d0d08ada45f9dde1e99cad9"; BigInteger bi = new BigInteger(s, 16); System.out.println(bi); 

Produzione:

23846102773961507302322850521

Per confronto, ecco Long.MAX_VALUE :

9223372036854775807

Usa parseLong:

 Long.parseLong(s, 16) 
 new BigInteger(string, 16).longValue() 

Per qualsiasi valore di alcuniLungo:

 new BigInteger(Long.toHexString(someLong), 16).longValue() == someLong 

In altre parole, questo restituirà il long inviato a Long.toHexString() per qualsiasi valore long , compresi i numeri negativi. Accetterà anche stringhe più grandi di una long e silenziosamente restituirà i 64 bit inferiori della stringa come long . È sufficiente controllare la lunghezza della stringa < = 16 (dopo aver tagliato gli spazi bianchi) se è necessario assicurarsi che l'input si adatti a long .

Long.parseLong(s, 16) funzionerà solo fino a "7fffffffffffffff" . Usa invece BigInteger :

 public static boolean isHex(String hex) { try { new BigInteger(hex, 16); return true; } catch (NumberFormatException e) { return false; } }