¿Cómo convertir una cadena hexadecimal a long en java?

Quiero convertir una cadena hexadecimal a larga en java.

Lo he intentado con la conversión general.

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

Pero recibo este mensaje de error:

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

¿Hay alguna forma de convertir String a long en java? ¿O estoy intentando lo que no es realmente posible?

¡Gracias!

Long.decode(str) acepta una variedad de formatos:

Acepta los números decimales, hexadecimales y octales proporcionados por la siguiente gramática:
DecodableString:

  • Registrarse opt DecimalNumeral
  • Registrarse opt 0x HexDigits
  • Registrarse opt 0X HexDigits
  • Registrarse opt # HexDigits
  • Registrarse opt 0 OctalDigits

Firmar:

Pero en su caso eso no ayudará, su Cadena está más allá del scope de lo que puede contener. Necesitas un BigInteger :

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

Salida:

23846102773961507302322850521

Para la comparación, aquí está Long.MAX_VALUE :

9223372036854775807

Use parseLong:

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

Para cualquier valor de someLong:

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

En otras palabras, esto devolverá la long que envió a Long.toHexString() para cualquier valor long , incluidos los números negativos. También aceptará cadenas que sean más long que long y silenciosamente devolverá los 64 bits más bajos de la cadena como long . Puede verificar la longitud de la cadena <= 16 (después de recortar el espacio en blanco) si necesita asegurarse de que la entrada se ajusta a una long .

Long.parseLong(s, 16) solo funcionará hasta "7fffffffffffffff" . Use BigInteger lugar:

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