biginteger用法 - 如何在Java中將BigInteger轉換為String




java biginteger用法 (6)

我將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[]) ,否則可能會遇到編碼問題。


扭轉

byte[] bytemsg=msg.getBytes(); 

您可以使用

String text = new String(bytemsg); 

使用BigInteger只是使事情複雜化,實際上並不清楚為什麼你想要一個字節[]。 BigInteger或byte []有什麼計劃? 有什麼意義?


為什麼不使用BigInteger(String)構造函數? 這樣,通過toString()往返應該工作正常。

(還要注意,你的轉換為字節沒有明確的指定一個字符編碼,並且是依賴於平台的 - 這可能是悲劇的根源)


使用字符串構造BigInteger時,該字符串必須格式化為十進制數字。 除非在第二個參數中指定基數,否則不能使用字母,您可以在基數中指定最多36個基數。 36只會給你字母數字字符[0-9,az],所以如果你使用這個,你將沒有格式。 你可以創建:new BigInteger(“ihavenospaces”,36)然後轉換回來,使用.toString(36)

但要保持格式化:使用幾個人提到的byte []方法。 這將把格式化的數據打包成最小的大小,並且可以輕鬆地跟踪字節數

對於RSA公鑰密碼系統示例程序來說,這應該是完美的,假設你保持消息中的字節數小於PQ的字節數

(我意識到這個線程是舊的)


你也可以使用Java的隱式轉換:

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






biginteger