Я понимаю, но пока не понимаю:
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);
}
}
Это не так:
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)
предположительно потому, что если вы буквально интерпретировали 0xffffffffffffffffL, он не поместился бы в пространство длинных чисел, которое подписано.
Но почему Long.toHexString () создает строку, которая не может быть проанализирована Long.parseLong (), и как мне обойти это? (Мне нужен способ получения длинных значений в их шестнадцатеричном представлении и обратно)