web-dev-qa-db-fra.com

Comment convertir une chaîne hexadécimale en long en Java?

Je veux convertir une chaîne hexadécimale en long en Java.

J'ai essayé avec une conversion générale.

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

Mais je reçois ce message d'erreur:

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

Existe-t-il un moyen de convertir String en long en Java? Ou j'essaye ce qui n'est pas vraiment possible !!

Merci!

42
user405398

Long.decode(str) accepte une variété de formats:

Accepte les nombres décimaux, hexadécimaux et octaux donnés par la grammaire suivante:
Chaîne décodable:

  • Signeopt DecimalNumeral
  • Signeopt 0x HexDigits
  • Signeopt 0X HexDigits
  • Signeopt # HexDigits
  • Signeopt 0 OctalDigits

Signe:

  • -

Mais dans votre cas, cela n'aidera pas, votre chaîne dépasse la portée de ce qui peut durer. Vous avez besoin d'un BigInteger :

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

Sortie:

23846102773961507302322850521

Pour comparaison, voici Long.MAX_VALUE :

9223372036854775807

81

Utilisez parseLong:

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

Pour toute valeur de someLong:

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

En d'autres termes, cela renverra le long que vous avez envoyé dans Long.toHexString() pour toute valeur long, y compris les nombres négatifs. Il accepte également les chaînes plus grandes qu'un long et renvoie silencieusement les 64 bits inférieurs de la chaîne sous la forme d'un long. Vous pouvez simplement vérifier la longueur de la chaîne <= 16 (après le découpage des espaces blancs) si vous devez vous assurer que l'entrée tient dans un long.

11
Bobby

Long.parseLong(s, 16) ne fonctionnera que jusqu'à "7fffffffffffffff". Utilisez à la place BigInteger:

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