Как преобразовать BigInteger в String в java
Я преобразовал a String
в BigInteger
следующим образом:
Scanner sc=new Scanner(System.in);
System.out.println("enter the message");
String msg=sc.next();
byte[] bytemsg=msg.getBytes();
BigInteger m=new BigInteger(bytemsg);
Теперь я хочу вернуть свою строку. Я использую m.toString()
, но это дает мне желаемый результат.
Почему? Где ошибка и что я могу сделать с ней?
Ответы
Ответ 1
Вы хотите использовать BigInteger.toByteArray()
String msg = "Hello there!";
BigInteger bi = new BigInteger(msg.getBytes());
System.out.println(new String(bi.toByteArray())); // prints "Hello there!"
Как я понимаю, вы делаете следующие преобразования:
String -----------------> byte[] ------------------> BigInteger
String.getBytes() BigInteger(byte[])
И вы хотите обратное:
BigInteger ------------------------> byte[] ------------------> String
BigInteger.toByteArray() String(byte[])
Обратите внимание, что вы, вероятно, хотите использовать перегрузки String.getBytes()
и String(byte[])
, которые указывают явное кодирование, в противном случае вы можете столкнуться с проблемами кодирования.
Ответ 2
Используйте m.toString()
или String.valueOf(m)
. String.valueOf использует toString(), но является нулевым.
Ответ 3
Почему вы не используете конструктор BigInteger(String)
? Таким образом, круговое отключение через toString()
должно работать нормально.
(обратите внимание также, что ваше преобразование в байты явно не указывает кодировку символов и зависит от платформы), что может стать источником скорби дальше по строке)
Ответ 4
Вы также можете использовать неявное преобразование Java:
BigInteger m = new BigInteger(bytemsg);
String mStr = "" + m; // mStr now contains string representation of m.
Ответ 5
При построении BigInteger со строкой, строка должна быть отформатирована как десятичное число. Вы не можете использовать буквы, если вы не укажете радиус во втором аргументе, вы можете указать до 36 в базе. 36 будет давать вам только буквенно-цифровые символы [0-9, a-z], поэтому, если вы используете это, у вас не будет форматирования. Вы можете создать: новый BigInteger ( "ihavenospaces", 36)
Затем, чтобы преобразовать назад, используйте .toString(36)
НО СОХРАНЯТЬ ФОРМАТИРОВАНИЕ:
Используйте метод byte [], о котором упомянули пару человек. Это упакует данные с форматированием в наименьший размер и позволит вам легко отслеживать количество байтов.
Это должно быть идеально подходит для примерной программы криптосистемы открытого ключа RSA, предполагая, что количество байтов в сообщении меньше числа байтов PQ
(я понимаю, что этот поток устарел)
Ответ 6
Отменить
byte[] bytemsg=msg.getBytes();
вы можете использовать
String text = new String(bytemsg);
использование BigInteger просто усложняет ситуацию, на самом деле неясно, зачем вам байта []. Что планируете делать с BigInteger или byte []? В чем смысл?
Ответ 7
http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html
каждый объект имеет метод toString() в Java.
Ответ 8
String input = "0101";
BigInteger x = new BigInteger ( input , 2 );
String output = x.toString(2);
Ответ 9
Вы также можете использовать конструктор BigInteger BigInteger val = new BigInteger (String value); //используем val
Ответ 10
//Как решить BigDecimal и BigInteger и вернуть строку.
BigDecimal x = new BigDecimal( a );
BigDecimal y = new BigDecimal( b );
BigDecimal result = BigDecimal.ZERO;
BigDecimal result = x.add(y);
return String.valueOf(result);