32

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

なんで?バグはどこにあり、どうすればよいですか?

4

9 に答える 9

27

使いたい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[])。そうしないと、エンコーディングの問題が発生する可能性があります。

于 2010-06-12T10:59:22.400 に答える
8

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

于 2010-06-12T10:44:44.793 に答える
8

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

(また、バイトへの変換は文字エンコーディングを明示的に指定せず、プラットフォームに依存することに注意してください-これは、さらに下の悲しみの原因になる可能性があります)

于 2010-06-12T10:44:52.267 に答える
7

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

BigInteger m = new BigInteger(bytemsg); 
String mStr = "" + m;  // mStr now contains string representation of m.
于 2013-10-22T17:17:48.383 に答える
1

逆にする

byte[] bytemsg=msg.getBytes(); 

あなたが使用することができます

String text = new String(bytemsg); 

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

于 2010-06-12T11:44:54.140 に答える
0

https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html .

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

于 2010-06-12T10:46:26.597 に答える
0
String input = "0101";
BigInteger x = new BigInteger ( input , 2 );
String output = x.toString(2);
于 2012-07-27T14:42:23.630 に答える