java: Long.parseLong(s,16) und Lange.toHexString(l) keine inversen?
Bekomme ich diese aber aber ich bekomme es nicht:
package com.example.bugs;
public class ParseLongTest {
public static void main(String[] args) {
long l = -1;
String s = Long.toHexString(l);
System.out.println(s);
long l2 = Long.parseLong(s, 16);
}
}
Dieser schlägt mit der folgenden:
ffffffffffffffff
Exception in thread "main" java.lang.NumberFormatException: For input string: "ffffffffffffffff"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Long.parseLong(Long.java:410)
at java.lang.Long.parseLong(Long.java:468)
at com.example.bugs.ParseLongTest.main(ParseLongTest.java:8)
vermutlich, weil, wenn Sie buchstäblich interpretiert 0xffffffffffffffffL, es würde nicht fit in der Langen Reihe Platz, unterzeichnet ist.
Aber warum Lange.toHexString() erzeugen eine Zeichenkette, die nicht analysiert werden kann, indem Lange.parseLong(), und wie kann ich dies umgehen? (Ich brauche einen Weg, um von long-Werten, um Ihre hex-string-Darstellung, und wieder zurück)
- Der code, den Sie geschrieben nicht angeben, das radix in
parseLong()
, die in NumberFormatException. Ist das ein Rechtschreibfehler oder SO in deinem original-code? Long.toString(long i, int radix)
undlong parseLong(String s, int radix)
jedoch wie erwartet funktionieren.- Ja, es ist ein Tippfehler.
- Meine ursprüngliche code hatte ,16 aber das verschwand, als ich ein test-Programm -- trotzdem es gibt noch die Ausnahme.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Long.parseLong(String s, int radix)
nicht verstehen Zweierkomplement. Für negative Zahl erwartet minus-Zeichen. Als bestsss bereits erwähnt, die Sie verwenden solltenLong.toString(long l, int radix)
zu machen hex-string kompatibel mit dieser Analyse-Methode.Dies ist ein bekannter bug, ist behoben, 1.8, sehen http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4215269
Können Sie Guave ist
UnsignedLongs.parseUnsignedLong(String s, int radix)
wenn Java 1.8 ist keine option.