Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BigInteger - > String -> BigInteger, ошибка java? 
:(
    Опции темы
turbanoff
Дата 6.4.2009, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 6.4.2009

Репутация: нет
Всего: 1



вот такой код
Код

import java.math.BigInteger;
public class test {
    public static void main (String[] args)
    {
        
        BigInteger a = new BigInteger("2060407914467850359");
        System.out.println(a);
        byte[] bt = a.toByteArray();

        for (int i=0; i<bt.length; i++)
            System.out.print(bt[i]+" ");
        System.out.println();
        
        String s = new String(bt);

        bt = s.getBytes();
        for (int i=0; i<bt.length; i++)
            System.out.print(bt[i]+" ");
        System.out.println();
        
        BigInteger b = new BigInteger(bt);
        System.out.println(b);
    }
}


вывод:
Код

2060407914467850359
28  -104  10  20  -22  66  120  119 
28     63  10  20  -22  66  120  119 
2035356641540601975

 smile 
Объясните пожалуйста, почему не совпадают?
PM MAIL   Вверх
SoulKeeper
Дата 6.4.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

Репутация: 11
Всего: 15



Код

BigInteger a = new BigInteger("2060407914467850359");
System.out.println(a);
BigInteger b = new BigInteger(a.toString());
System.out.println(b);

PM MAIL   Вверх
math64
Дата 6.4.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Сам видишь:
Код

  String s = new String(bt);
  bt = s.getBytes();

после преобразования массива байт в строку и обратно -104 стал 63 ('?'), код недействительный в текущей кодировке.
Использованные конструктор и метод класса String лучше не использовать (по крайней мере если не уверен что все байты в массиве и символы в строке представимы в текущей кодировке).

PM   Вверх
turbanoff
Дата 6.4.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 6.4.2009

Репутация: нет
Всего: 1



есть идеи почему тока -104 ?
все остальные байты всегд норм обрабатывает.
а как было бы здорово если бы она все нормально делало) по логике...

Цитата

(по крайней мере если не уверен что все байты в массиве и символы в строке представимы в текущей кодировке)


такой вопрос, а что будет если оно не представимо?
великий и могучий random ?

Это сообщение отредактировал(а) turbanoff - 6.4.2009, 16:15
PM MAIL   Вверх
LSD
Дата 6.4.2009, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Нафига вообще нужно делать такое:
Код

byte[] bt = a.toByteArray();
String s = new String(bt);
bt = s.getBytes();

? 

Такая операция лишена смыслу и всегда потенциальный источник ошибок.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
SoulKeeper
Дата 6.4.2009, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

Репутация: 11
Всего: 15



turbanoff, не изобретай велосипед.

Во втором посте пример который отлично отработал.
PM MAIL   Вверх
turbanoff
Дата 6.4.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 6.4.2009

Репутация: нет
Всего: 1



Цитата(SoulKeeper @ 6.4.2009,  16:44)
turbanoff, не изобретай велосипед.

Во втором посте пример который отлично отработал.

в общем никто не знает, как я понял)

и собственно вопрос темы был не в этом...

Это сообщение отредактировал(а) turbanoff - 6.4.2009, 16:55
PM MAIL   Вверх
Platon
Дата 6.4.2009, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



turbanoff, лучше объясни на каком основании они должны совпадать?
PM MAIL ICQ   Вверх
LSD
Дата 6.4.2009, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(turbanoff @  6.4.2009,  16:51 Найти цитируемый пост)
в общем никто не знает, как я понял)

Тебе уже объяснили, это ты не понял. Кто тебе сказал, что преобразование String<->byte[] должно быть взаимно однозначным?
Код

Charset charset = Charset.forName("UTF-16");
...
String s = new String(bt, charset);
bt = s.getBytes(charset);

и попробуй разные кодировки.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.4497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.