Как преобразовать 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 []? В чем смысл?

Ответ 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);