it-swarm.com.de

Wie konvertiert man eine hexadezimale Zeichenfolge in Java nach Long?

Ich möchte eine hexadezimale Zeichenfolge in Java in long konvertieren.

Ich habe es mit allgemeiner Umstellung versucht.

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

Aber ich erhalte diese Fehlermeldung:

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

Gibt es eine Möglichkeit, String in Long in Java zu konvertieren? Oder versuche ich, was nicht wirklich möglich ist !!

Vielen Dank!

42
user405398

Long.decode(str) akzeptiert eine Vielzahl von Formaten:

Akzeptiert Dezimal-, Hexadezimal- und Oktalzahlen, die von der folgenden Grammatik angegeben werden:
DecodableString:

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

Zeichen:

  • -

Aber in deinem Fall hilft das nicht, dein String ist jenseits des Rahmens dessen, was lange halten kann. Sie benötigen ein BigInteger :

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

Ausgabe:

23846102773961507302322850521

Zum Vergleich hier Long.MAX_VALUE :

9223372036854775807

81

Verwenden Sie parseLong:

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

Für irgendeinen Wert von someLong:

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

Mit anderen Worten, dies gibt den long zurück, den Sie an Long.toHexString() gesendet haben, und zwar für jeden long Wert, einschließlich negativer Zahlen. Es werden auch Zeichenfolgen akzeptiert, die größer als ein long sind, und die unteren 64 Bits der Zeichenfolge werden stillschweigend als ein long zurückgegeben. Sie können einfach die String-Länge <= 16 (nach dem Trimmen von Whitespace) überprüfen, wenn Sie sicherstellen möchten, dass die Eingabe in ein long passt.

11
Bobby

Long.parseLong(s, 16) funktioniert nur bis zu "7fffffffffffffff". Verwenden Sie stattdessen BigInteger:

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