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?
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.
Verwenden Sie m.toString()
oder String.valueOf(m)
. String.valueOf verwendet toString (), ist jedoch nullsicher.
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.
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.
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)
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?
// 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);
String input = "0101";
BigInteger x = new BigInteger ( input , 2 );
String output = x.toString(2);
http://Java.Sun.com/j2se/1.3/docs/api/Java/lang/Object.html
jedes Objekt verfügt in Java über eine toString () - Methode.