2016-12-01 2 views
0

Я пытаюсь разобрать Integer.MIN_VALUE от hex до int, но я получаю исключение NumberFormatException. Когда я добавляю минус в строку, он работает.Parsing Integer.MIN_VALUE from hex вызывает NumberFormatException

  1. Является ли это ошибкой или я что-то неправильно понимаю. С моей точки зрения кодирование и декодирование должны быть биективными. Но, похоже, это не так.

  2. Я должен декодировать «0x80000000». Как мне это сделать? Я мог поймать исключение и добавить минус к String и повторить попытку. Но это кажется мне не чистым.

Вот идет бегущий пример:

public static void main(String[] args) { 
    int i1 = Integer.MIN_VALUE; //0x80000000 
    String s1 = Integer.toHexString(i1); 
    String s2 = "-" + s1; 

    System.out.println(String.format("Out1: %1$d | %1$h == %2$s <> %3$s", i1 , s1, s2)); 
    // Out1: -2147483648 | 80000000 == 80000000 <> -80000000 

    // this should work, but does not 
    try { 
     int s1_parsed = Integer.parseInt(s1, 16); 
     System.out.println(String.format("Out2: %1$d | %1$h, %2$d | %2$h", i1, s1_parsed)); 
    } catch (NumberFormatException ex) { 
     ex.printStackTrace(); 
    } 

    // this is working, but I do not know why 
    try { 
     int s2_parsed = Integer.parseInt(s2, 16); 
     System.out.println(String.format("Out3: %1$d | %1$h == %2$d | %2$h", i1, s2_parsed)); 
     // Out3: -2147483648 | 80000000 == -2147483648 | 80000000 
    } catch (NumberFormatException ex) { 
     ex.printStackTrace(); 
    } 
} 

ответ

Смежные вопросы