#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