NumberFormatException в InputString

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

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.. Но до вчерашнего дня он работал абсолютно нормально и для этого ввода.. имеет ли это какое-либо отношение к длине... Я на самом деле пытаюсь преобразовать String в его эквивалент Шестнадцатеричное значение.

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


person AngelsandDemons    schedule 05.10.2011    source источник


Ответы (2)


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

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

person Joachim Sauer    schedule 05.10.2011
comment
Но как мне затем проанализировать входящую строку. У меня есть строка, и я хочу найти ее шестнадцатеричный эквивалент. - person AngelsandDemons; 05.10.2011
comment
@ankit: пожалуйста, найдите несколько минут, чтобы прочитать ссылку, которую я разместил, и попробуйте найти ответ в Интернете. Если у вас остались вопросы после этого, не стесняйтесь спрашивать. - person Joachim Sauer; 05.10.2011
comment
я думаю, используя longValue, я могу преобразовать BigInt в long, но моя входящая строка сначала анализируется в Long... При разборе выдается ошибка.. - person AngelsandDemons; 05.10.2011
comment
@ankit: вы не можете разобрать это String на long, потому что это слишком большое число, чтобы поместиться в long. Вам нужно перейти напрямую от String к BigInteger или найти другой подход. - person Joachim Sauer; 05.10.2011
comment
@ankit вам вообще не нужен long, если вы используете BigInteger в этом случае. - person Mikita Belahlazau; 05.10.2011
comment
Более того, входящий ввод представляет собой строку длиной 72 бита. Теперь, как я могу назначить ее BigInt.. После того, как она назначена BigInt, я могу использовать longValue, чтобы преобразовать ее в long, а затем проанализировать ее, чтобы получить шестнадцатеричное значение. - person AngelsandDemons; 05.10.2011
comment
Вы не можете превратить эту строку в длинную каким-либо способом, потому что она не помещается в длинную. - person Joachim Sauer; 05.10.2011
comment
Я использовал конструктор BigInt, а затем преобразовал BigInt в long, а затем проанализировал его, чтобы получить шестнадцатеричное значение. Но полученное шестнадцатеричное значение сильно отличается от ожидаемого значения. Я преобразовал BigInt в длинное значение, которое дало мне значение -7908320945662590976. Почему я получаю другое значение и как его решить. - person AngelsandDemons; 05.10.2011
comment
Какую часть вы не можете использовать long для этого, вы не поняли? Я сдаюсь. - person Joachim Sauer; 05.10.2011
comment
Подсказка: попробуйте toString(int) метод BigInteger. - person Joachim Sauer; 05.10.2011
comment
То, что я сделал, совершенно другое. Я написал новый метод для преобразования большого числа (оно может быть любой длины) в его шестнадцатеричный эквивалент с использованием метода подстроки, а затем продолжил добавлять его в требуемую шестнадцатеричную строку. - person AngelsandDemons; 07.10.2011

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
person user883499    schedule 05.10.2011