it-swarm.com.de

Wie konvertiert man BigInteger in Java in String?

Ich habe eine String wie folgt in BigInteger umgewandelt:

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); 

Jetzt will ich meine Saite zurück. Ich benutze m.toString(), aber das gibt mir das gewünschte Ergebnis.

Warum? Wo ist der Fehler und was kann ich dagegen tun?

26
condinya

Sie möchten BigInteger.toByteArray() verwenden

String msg = "Hello there!";
BigInteger bi = new BigInteger(msg.getBytes());
System.out.println(new String(bi.toByteArray())); // prints "Hello there!"

Ich verstehe es so, dass Sie die folgenden Transformationen durchführen:

  String  -----------------> byte[] ------------------> BigInteger
          String.getBytes()         BigInteger(byte[])

Und du willst das Gegenteil:

  BigInteger ------------------------> byte[] ------------------> String
             BigInteger.toByteArray()          String(byte[])

Beachten Sie, dass Sie wahrscheinlich Überladungen von String.getBytes() und String(byte[]) verwenden möchten, die eine explizite Codierung angeben. Andernfalls können Codierungsprobleme auftreten.

25

Verwenden Sie m.toString() oder String.valueOf(m). String.valueOf verwendet toString (), ist jedoch nullsicher.

7
krock

Warum verwenden Sie nicht den Konstruktor BigInteger(String)? Auf diese Weise sollte eine Rundauslösung über toString() problemlos funktionieren.

(Beachten Sie auch, dass Ihre Konvertierung in Bytes keine explizite Zeichenkodierung angibt und plattformabhängig ist. 

7
Brian Agnew

Sie können auch die implizite Konvertierung von Java verwenden:

BigInteger m = new BigInteger(bytemsg); 
String mStr = "" + m;  // mStr now contains string representation of m.
7
Withheld

Wenn Sie einen BigInteger mit einem String erstellen, muss der String als Dezimalzahl formatiert sein. Sie können keine Buchstaben verwenden. Wenn Sie im zweiten Argument keine Basis angegeben haben, können Sie in der Basis bis zu 36 angeben. 36 enthält nur alphanumerische Zeichen [0-9, a-z]. Wenn Sie dies verwenden, haben Sie keine Formatierung. Sie können Folgendes erstellen: new BigInteger ("ihavenospaces", 36) Verwenden Sie dann zum Konvertieren eine .toString (36).

ABER UM DIE FORMATIERUNG ZU BEHALTEN: Verwenden Sie die byte-Methode [], die von einigen Leuten erwähnt wurde. Dadurch werden die Daten mit der Formatierung in die kleinste Größe gepackt und Sie können die Anzahl der Bytes problemlos nachverfolgen

Dies sollte ideal für ein RSA-Public-Key-Kryptosystem-Beispielprogramm sein, vorausgesetzt, Sie halten die Anzahl der Bytes in der Nachricht unter der Anzahl der Bytes von PQ

(Ich merke, dass dieser Thread alt ist)

2
koZmiZm

Umkehren

byte[] bytemsg=msg.getBytes(); 

sie können verwenden

String text = new String(bytemsg); 

die Verwendung eines BigInteger macht die Sache nur komplizierter, es ist nicht klar, warum Sie ein Byte [] wollen. Was planen Sie mit BigInteger oder Byte []? Was ist der Sinn?

1
Peter Lawrey

// Wie löse ich BigDecimal & BigInteger und gebe einen String zurück?.

  BigDecimal x = new BigDecimal( a );
  BigDecimal y = new BigDecimal( b ); 
  BigDecimal result = BigDecimal.ZERO;
  BigDecimal result = x.add(y);
  return String.valueOf(result); 
0
Raj
String input = "0101";
BigInteger x = new BigInteger ( input , 2 );
String output = x.toString(2);
0
Rayhanur Rahman

http://Java.Sun.com/j2se/1.3/docs/api/Java/lang/Object.html

jedes Objekt verfügt in Java über eine toString () - Methode.

0
Nils