Я преобразовал 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()
но это дает мне желаемый результат.
Почему? Где ошибка и что я могу делать с этим?
Вы хотите использовать 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 [])
, которые задают явную кодировку, иначе вы можете столкнуться с проблемами кодирования.
Почему бы вам не использовать конструктор BigInteger(String)
? Таким образом, обход через toString()
должен работать нормально.
(обратите также внимание, что ваше преобразование в байты не указывает явно кодировку символов и зависит от платформы - это может быть источником проблем в дальнейшем)
Используйте m.toString()
или String.valueOf(m)
. String.valueOf использует toString(), но безопасен для нуля.
http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html
каждый объект имеет метод toString () в Джава.
Чтобы перевернуть
byte[] bytemsg=msg.getBytes();
, вы можете использовать
String text = new String(bytemsg);
, используя BigInteger, просто все усложняет, на самом деле непонятно, зачем вам нужен байт []. Что планируете делать с BigInteger или byte []? В чем суть?