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) und long 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.
InformationsquelleAutor Jason S | 2011-03-17
Schreibe einen Kommentar