次のように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()を使用しますが、nullセーフです。
Javaの暗黙的な変換も使用できます。
BigInteger m = new BigInteger(bytemsg);
String mStr = "" + m; // mStr now contains string representation of m.
文字列でBigIntegerを構築する場合、文字列は10進数としてフォーマットする必要があります。 2番目の引数に基数を指定しない限り、文字を使用できません。基数には最大36個を指定できます。 36では、英数字のみ[0-9、a-z]が返されるため、これを使用する場合、書式設定はできません。以下を作成できます。new BigInteger( "ihavenospaces"、36)次に変換して戻すには、.toString(36)を使用します
ただし、フォーマットを維持するには:数人が言及したbyte []メソッドを使用します。これにより、書式設定されたデータが最小サイズにパックされ、バイト数を簡単に追跡できます
メッセージのバイト数をPQのバイト数よりも小さくすることを前提とすると、RSA公開キー暗号システムのサンプルプログラムには最適です。
(このスレッドは古いことを認識しています)
逆に
byte[] bytemsg=msg.getBytes();
使用できます
String text = new String(bytemsg);
bigIntegerを使用すると事態が複雑になりますが、実際にはbyte []が必要な理由が明確ではありません。 BigIntegerまたはbyte []で何をする予定ですか?ポイントは?
// 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);
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
すべてのオブジェクトにはJavaのtoString()メソッドがあります。