web-dev-qa-db-ja.com

javaでBigIntegerを文字列に変換する方法

次のようにStringBigIntegerに変換しました。

_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()を使用していますが、それは私に望ましい結果を与えています。

どうして?バグはどこにあり、それについて何ができますか?

28
condinya

使用したい 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[])のオーバーロードを使用することに注意してください。そうしないと、エンコードの問題が発生する可能性があります。

26

なぜBigInteger(String)コンストラクターを使用しないのですか?そうすれば、toString()を介したラウンドトリップは正常に機能するはずです。

(バイトへの変換では、文字エンコードが明示的に指定されておらず、プラットフォームに依存していることに注意してください。

8
Brian Agnew

m.toString()またはString.valueOf(m)を使用します。 String.valueOfはtoString()を使用しますが、nullセーフです。

7
krock

Javaの暗黙的な変換も使用できます。

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

文字列でBigIntegerを構築する場合、文字列は10進数としてフォーマットする必要があります。 2番目の引数に基数を指定しない限り、文字を使用できません。基数には最大36個を指定できます。 36では、英数字のみ[0-9、a-z]が返されるため、これを使用する場合、書式設定はできません。以下を作成できます。new BigInteger( "ihavenospaces"、36)次に変換して戻すには、.toString(36)を使用します

ただし、フォーマットを維持するには:数人が言及したbyte []メソッドを使用します。これにより、書式設定されたデータが最小サイズにパックされ、バイト数を簡単に追跡できます

メッセージのバイト数をPQのバイト数よりも小さくすることを前提とすると、RSA公開キー暗号システムのサンプルプログラムには最適です。

(このスレッドは古いことを認識しています)

2
koZmiZm

逆に

byte[] bytemsg=msg.getBytes(); 

使用できます

String text = new String(bytemsg); 

bigIntegerを使用すると事態が複雑になりますが、実際にはbyte []が必要な理由が明確ではありません。 BigIntegerまたはbyte []で何をする予定ですか?ポイントは?

1
Peter Lawrey

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

すべてのオブジェクトにはJavaのtoString()メソッドがあります。

0
Nils