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!
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
Utilisez parseLong:
Long.parseLong(s, 16)
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
.
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;
}
}