Исключение NumberFormatException во входной строке

#java #parsing #long-integer #numberformatexception

#java #синтаксический анализ #длинное целое число #исключение numberformatexception

Вопрос:

Пожалуйста, помогите мне решить это исключение:-

 String strBinary="100000000000000001000000000000000000000000000000000000000000000000000000";
        System.out.println("length is "   strBinary.length()); 
        long intParse=Long.parseLong(strBinary, 2);
        System.out.println("int parsed is "     intParse); 
        String hexString=Long.toHexString(intParse);
          System.out.println(hexString);
  

Вывод равен 72 вместе с NumberFormatException при синтаксическом анализе с использованием Long.parseLong..
Но до вчерашнего дня он работал абсолютно нормально и для этого ввода..
имеет ли это какое-либо отношение к длине…
На самом деле я пытаюсь преобразовать строку в эквивалентное шестнадцатеричное значение.

Пожалуйста, помогите….

Ответ №1:

A long может содержать 64 бита данных. Наибольшее значение long , которое может представлять a, равно 9223372036854775807 (или 2 63-1). Строка, которую вы пытаетесь проанализировать, намного больше.

Возможно, вы сможете куда-то пойти, используя BigInteger класс, который может обрабатывать целочисленные значения произвольного размера (конечно, эффективно ограниченные памятью).

Комментарии:

1. Но как мне затем проанализировать мою входящую строку.. У меня есть строка, и я хочу найти ее шестнадцатеричный эквивалент.

2. @ankit: пожалуйста, найдите несколько минут, чтобы прочитать ссылку, которую я опубликовал, и попытайтесь найти ответ в Интернете. Если после этого у вас все еще есть вопросы, не стесняйтесь спрашивать.

3. я предполагаю, что с помощью longValue я могу преобразовать BigInt в long, но моя входящая строка сначала анализируется в Long… При синтаксическом анализе возникает ошибка..

4. Вы никак не можете превратить эту строку в long , потому что она не вписывается в long .

5. Какую часть вы не можете использовать long для этого , разве вы не поняли? Я сдаюсь.

Ответ №2:

Long мал для ваших целей. Возможно, вы захотите использовать объект BigInteger следующим образом

 String strBinary="100000000000000001000000000000000000000000000000000000000000000000000000";
BigInteger bigInteger = new BigInteger(strBinary, 2);
System.out.println(bigInteger.longValue()); //This would give you the long value
System.out.println(bigInteger.toString(16)); //This would give you the hex string