Comment convertir une chaîne hexadécimale de long en java?
Je veux convertir une chaîne hexadécimale de long en java.
J'ai essayé avec la conversion en général.
String s = "4d0d08ada45f9dde1e99cad9";
long l = Long.valueOf(s).longValue();
System.out.println(l);
String ls = Long.toString(l);
Mais j'obtiens ce message d'erreur:
java.lang.NumberFormatException: For input string: "4d0d08ada45f9dde1e99cad9"
Est-il un moyen de convertir la Chaîne de caractères de long en java? Ou suis-je en train d'essayer ce qui n'est pas vraiment possible!!
Merci!
- Essayez d'ajouter un préfixe "0x" à la chaîne avant d'appeler valueOf
- Euh ... avez-vous regarder dans la documentation javadoc? Économisez du temps et de toujours regarder dans la javadoc de la première.
- Aussi, valueOf doit accepter un deuxième paramètre qui spécifie la base. Essayer de passer à 16 (et la corde sans le préfixe)
- Je pense que vous confondez
Long.valueOf(String)
avecLong.decode(String)
. La Javadoc devalueOf(String)
dit "Analyse la chaîne de caractères en argument un décimal signé longtemps." - Stephen, à droite, c'est le décoder accepte le préfixe. Mais valueOf accepte la base de paramètres (voir le lien ci-dessus)
Vous devez vous connecter pour publier un commentaire.
Long.décoder(str)
accepte une variété de formats:Mais dans votre cas, ce n'est pas aider, votre Chaîne est au-delà de la portée de ce long peut tenir. Vous avez besoin d'un
BigInteger
:De sortie:
Pour Comparaison, voici
Long.MAX_VALUE
:Utilisation parseLong:
Pour toute valeur de someLong:
En d'autres termes, ce sera le retour de la
long
que vous avez envoyé dansLong.toHexString()
pour toutlong
valeur, y compris les nombres négatifs. Il acceptera également des chaînes de caractères qui sont plus d'unlong
et silencieusement retour le bas du 64 bits de la chaîne comme unlong
. Vous pouvez seulement de vérifier la longueur de la corde <= 16 (après le parage des espaces) si vous avez besoin pour vous assurer que l'entrée s'inscrit dans unlong
.Long.parseLong(s, 16)
ne fonctionnera que jusqu'à"7fffffffffffffff"
. UtilisationBigInteger
à la place: